Guide/Come arrestare i container Docker

Come arrestare i container Docker sul Mac, uno o tutti

Atta 🐬

Fondatore di Vitals

Pubblicata il

In breve

Per arrestare un container Docker, esegui docker stop seguito dal nome o dall’ID; docker ps li elenca. Per arrestare tutti i container in esecuzione, esegui docker stop $(docker ps -q). In un progetto Compose, docker compose stop arresta i suoi container e docker compose down li rimuove anche. docker stop chiede al container di chiudersi e lo forza dopo 10 secondi. Un container che ritorna ha una restart policy; disattivala con docker update --restart=no. Vitals, un monitor di sistema per Mac, arresta i container dalla barra dei menu: il suo elenco Container mostra la memoria di ciascuno, e un clic lo arresta dopo averti chiesto conferma.

Come arrestare i container Docker dal Terminale

  1. 01 Esegui docker ps per elencare i container in esecuzione, con nomi e ID.
  2. 02 Arrestane uno con docker stop e il suo nome, per esempio docker stop web-1. Puoi indicarne diversi in un solo comando.
  3. 03 Arresta tutti i container in esecuzione con docker stop $(docker ps -q). docker ps -q stampa solo gli ID, e docker stop li prende tutti.
  4. 04 Per un progetto Compose, esegui docker compose stop nella sua cartella per arrestarne i servizi, o docker compose down per arrestarli e rimuovere i container e la rete del progetto. I volumi restano, a meno che tu non aggiunga -v.
  5. 05 Esegui di nuovo docker ps. Un container ancora elencato si sta ancora chiudendo, e uno che ricompare un attimo dopo ha una restart policy.

Gli stessi comandi funzionano con OrbStack, Colima e Rancher Desktop quando il comando docker punta a loro. Podman ha podman stop, e podman stop -a li arresta tutti.

Arrestare un container termina i suoi processi e conserva tutto il resto, file, impostazioni e volumi, pronto per docker start. Per questo è il modo sicuro di recuperare memoria e CPU da un container che non stai usando. La tabella qui sotto lo confronta con i comandi a cui si ricorre di solito accanto a questo.

docker stop, kill, pause, rm e compose down

ComandoCosa faQuando usarlo
docker stop Invia SIGTERM, poi SIGKILL dopo 10 secondi Quasi sempre: l’app può finire di scrivere e chiudere le connessioni
docker kill Invia subito SIGKILL Un container ignora docker stop
docker pause Congela i processi, che mantengono la loro memoria Vuoi recuperare la CPU per un po’, non la memoria
docker rm Rimuove un container arrestato, o uno in esecuzione con -f Non ti serve più; i volumi con nome restano
docker compose stop Arresta i container di un progetto e li conserva Riavvierai presto lo stesso progetto
docker compose down Arresta e rimuove i container e la rete Vuoi ripartire da zero la prossima volta; aggiungi -v per rimuovere anche i volumi

Perché un container arrestato si riavvia

Un container con una restart policy viene riavviato da Docker. Con always, un container che hai arrestato torna al successivo avvio di Docker Desktop, quindi i container arrestati ieri sono di nuovo in esecuzione dopo un riavvio. Con unless-stopped, un container che hai arrestato resta arrestato. I file Compose spesso impostano restart: always su database e cache.

Per vedere la policy di un container, esegui docker inspect --format '{{.HostConfig.RestartPolicy.Name}}' seguito dal suo nome. Per disattivarla, esegui docker update --restart=no e il nome, o cambia restart: nel file Compose.

Quando docker stop impiega 10 secondi

docker stop aspetta che il processo principale del container esca dopo SIGTERM. Un processo che ignora il segnale, spesso uno script di shell che non lo inoltra, blocca l’arresto per tutti i 10 secondi prima che Docker lo termini. docker stop -t 2 accorcia l’attesa. Correggere l’immagine la fa arrestare subito: avvia l’app con exec nello script di entrypoint, o imposta init: true sul servizio in Compose.

Arrestare i container e recuperare la memoria

Sul Mac, i container girano dentro un’unica macchina virtuale Linux. Arrestarli libera la loro memoria al suo interno, ma la macchina virtuale può continuare a trattenerla, quindi Monitoraggio Attività può mostrare ancora un grande Virtual Machine Service for Docker. Resource Saver, o chiudere Docker Desktop, la restituisce a macOS; vedi Docker usa troppa memoria per le impostazioni.

Arrestare i container senza Terminale

La vista Containers di Docker Desktop ha un pulsante Stop su ogni container e su ogni progetto Compose. Sta nella finestra di Docker Desktop, quindi devi aprire l’app per usarlo. App per la barra dei menu come Captain elencano i container sotto un’icona nella barra dei menu, con avvio e arresto per ciascuno. Vitals fa lo stesso dalla sua barra dei menu, e aggiunge ciò che nessuna di queste mostra: quanta memoria e CPU usa ogni container, così sai quale arrestare.

Cosa aggiunge Vitals

Vitals arresta i container dalla barra dei menu del Mac, con la loro memoria in vista.

  • L’elenco Container nel menu: ogni container in esecuzione con il suo progetto Compose, la sua immagine e una barra per la memoria
  • Passa sopra uno e fai clic sulla × che compare. La riga chiede conferma, poi lo arresta come fa docker stop, con 10 secondi per chiudersi
  • Nel pannello Container della finestra, selezionane diversi e fai Control-clic per arrestarli insieme, oppure fai Control-clic su un progetto Compose e scegli Arresta tutti
  • Memoria, CPU, rete, disco e porte pubblicate per ogni container, con Docker Desktop, OrbStack, Colima, Rancher Desktop e Podman

Buono a sapersi

  • Vitals chiede conferma prima di arrestare qualcosa, e non avvia, rimuove o modifica mai un container.
  • Un container con una restart policy può essere riavviato dal suo motore. La finestra lo dice quando chiede conferma.
  • Se il motore rifiuta o non risponde, la riga indica che il container è ancora in esecuzione.
  • L’elenco Container compare mentre un motore è in esecuzione.
Acquista Vitals a $9 $9 durante il lancio, poi $29. Rimborso entro 14 giorni.

Domande frequenti

Come arresto tutti i container Docker in una volta?

Esegui docker stop $(docker ps -q). Elenca gli ID di tutti i container in esecuzione e li arresta uno per uno. In Vitals, selezionali nel pannello Container e fai Control-clic per arrestarli insieme.

Qual è la differenza tra docker stop e docker kill?

docker stop invia SIGTERM e aspetta fino a 10 secondi prima di forzare il container con SIGKILL. docker kill invia subito SIGKILL, quindi l’app non ha modo di finire di scrivere o di chiudere le connessioni.

Qual è la differenza tra docker compose stop e down?

docker compose stop arresta i container e li conserva, pronti per docker compose start. docker compose down li arresta e rimuove i container e la rete del progetto; i volumi restano, a meno che tu non aggiunga -v.

Perché il mio container Docker si riavvia dopo che l’ho arrestato?

Ha una restart policy always, quindi Docker lo riavvia quando si avvia Docker Desktop. Esegui docker update --restart=no con il suo nome, o cambia restart: nel file Compose.

Arrestare un container ne cancella i dati?

No. Un container arrestato conserva i suoi file e volumi, e docker start lo riavvia. docker rm rimuove il container; i volumi con nome restano finché non li rimuovi.

Posso arrestare i container Docker dalla barra dei menu del Mac?

Sì, con Vitals. Il suo menu nella barra dei menu elenca i container in esecuzione con la loro memoria, e con un clic arresti un container dopo la conferma. Funziona con Docker Desktop, OrbStack, Colima, Rancher Desktop e Podman.

Nel glossario

Altre guide