Avete problemi con l’arresto dei contenitori Docker? Trovare il modo corretto per fermare un contenitore è difficile con la possibilità di creare molti contenitori diversi. In questo articolo, imparerete i comandi Docker per arrestare un contenitore o tutti i contenitori.
Continuate a leggere per saperne di più!
Prerequisiti
- Per seguire questo tutorial, assicuratevi di avere quanto segue:
- Docker Desktop – Questo tutorial utilizza la versione 3.5.2. Il motore Docker è disponibile se siete su Linux poiché l’interfaccia grafica non lo è.
- A running Docker container or containers.
Arrestare i contenitori con il comando docker stop Containers
Iniziamo con il primo comando: il comando docker stop
containers e come ferma i contenitori.
Ad esempio, forse dovete fermare un contenitore in esecuzione con il nome mystifying_hofstadter
e un ID di fb66ed502096
. Come mostrato nell’esempio sottostante, fermate il contenitore con il comando docker stop
containers.

Cosa succede se hai diversi container in esecuzione e vuoi fermarli? Il comando docker stop
supporta l’arresto di più ID di container, uno alla volta.
Per prima cosa, elenca tutti i container tramite il comando docker ps
e passa gli ID dei container al comando docker stop
, come mostrato di seguito.

Cosa fare se desideri arrestare tutti i container in esecuzione senza recuperare manualmente gli ID dei container e passarli a docker stop
? Il comando docker ps -q
può fare ciò. Il parametro -q
del comando docker ps
restituisce solo gli ID dei container.

La costruzione
$(docker ps -q)
sopra è una sottoespressione sia in Bash su Linux che in PowerShell su Windows. Una sottoespressione istruisce la shell di elaborare prima un insieme di comandi,docker ps -q
, e poi restituire l’insieme di risultati al comando originaledocker stop
.
Il comando docker stop
utilizza il comando dei contenitori SIGTERM. I segnali di Linux informano un processo di un evento, ma spetta al processo decidere come agire su un determinato segnale.
Quando si utilizza il segnale SIGTERM, Docker utilizza il segnale per arrestare delicatamente un processo, attendendo un valore predefinito di 10
secondi prima di inviare il segnale SIGKILL, che termina immediatamente il processo.
Arresto di un Container Utilizzando i Segnali di Processo
Hai appreso il comportamento predefinito di Docker (segnale di arresto) con il comando docker stop
durante l’arresto di un contenitore. Tuttavia, potresti non volere il comportamento predefinito. In alternativa, puoi istruire Docker a utilizzare segnali di arresto alternativi.
Con il flag --stop-signal
del comando docker run
, puoi specificare il segnale di arresto durante l’avvio del contenitore. Questo flag imposta il segnale che verrà inviato al contenitore in esecuzione quando desideri arrestarlo.
Nell’esempio qui sotto, il flag --stop-signal
assume il valore SIGQUIT
, che dice a Docker di inviare il segnale SIGQUIT quando è ora di fermare il contenitore. L’esempio utilizza anche i seguenti parametri:
d
– Runs the container in detached (background) mode. The detached mode will not allow the container to be immediately interacted with by the user since the process is running in the background.t
– allocates a Pseudo-TTY (PTY) console, which emulates a real terminal console in the container and stops the Ubuntu container from immediately exiting. The Ubuntu container in the example requires a PTY console to stay active in the background.- “nome immagine” – Quale immagine Docker utilizzare per il provisioning del contenitore, in questo caso l’immagine
ubuntu
.

SIGQUIT
as the signal when starting and then stopping a Docker container. Puoi anche specificare il segnale di stop utilizzando un Dockerfile, che dice a Docker come costruire un contenitore. Puoi aggiungere un’entrata al Dockerfile specificando il segnale di stop con
STOPSIGNAL SIGQUIT
, ad esempio. Puoi sostituireSIGQUIT
con qualsiasi segnale di stop desideri.
Uscita immediata dai contenitori con docker kill
Ci saranno momenti in cui vorrai uscire dai contenitori senza concedere loro un periodo di grazia. Il comando docker kill
ferma immediatamente un contenitore.
Nell’esempio qui sotto, viene passato il contenitore con ID 2aa318273db5
a docker kill
. Il contenitore uscirà immediatamente tramite il segnale SIGKILL. Al contenitore non sarà consentita un’uscita delicata. Come risultato del comando, il contenitore uscirà e verrà mostrato l’ID del contenitore.
Uccidi tutti i contenitori Docker con il comando
docker kill $(docker ps -q)
. Nota che(docker ps -q
) è una sottoespressione qui.
Arresto e rimozione di un contenitore con docker rm
Di default, quando si crea un contenitore, quel contenitore viene costruito allo stesso modo di prima: è idempotente. Rimuovere un contenitore avrà un impatto minimo e con questo in mente, docker rm
può forzare l’arresto e rimuovere un contenitore. Docker emette un segnale SIGKILL
al processo principale e rimuove il contenitore dall’elenco dei contenitori disponibili nell’installazione di Docker.
Se il contenitore deve mantenere i file interni modificati o il suo stato deve essere conservato, allora rimuovere un contenitore distruggerà tali modifiche. Attenzione ai potenziali problemi!
Nell’esempio seguente, forse hai avviato un contenitore a cui è stato assegnato il nome kind_galileo
. Prima di rimuovere un contenitore, il contenitore deve essere arrestato, come mostrato di seguito. Il comando docker ps -a
sta visualizzando lo stato di Exited
per il contenitore di esempio.

Ora che il contenitore è stato arrestato, emettendo il comando docker rm
si rimuove completamente il contenitore.
Invece di fermare il contenitore per poi rimuoverlo, la combinazione di --force
e docker rm
fermerà e rimuoverà il contenitore in un’unica operazione. Il contenitore, laughing_elion
, non sarà più disponibile per l’esecuzione.
Se non si specifica il comando
--force
, si incontrerà il messaggio di erroreRisposta di errore dal daemon: Non è possibile rimuovere un contenitore in esecuzione...

Arrestare i contenitori Docker con Docker Compose
I comandi Docker sono tipicamente utilizzati su un singolo contenitore, ma è possibile creare un servizio con più contenitori che lavorano in concerto tra loro. Lo strumento Docker Compose ti consente di configurare un servizio composto da più contenitori che lavorano insieme.
Dato che i contenitori all’interno di un servizio sono progettati per lavorare insieme, è meglio fermare l’intero servizio in modo grazioso anziché ogni singolo contenitore.
Se hai un servizio in esecuzione con più contenitori, [docker-compose stop]
ferma il servizio senza rimuovere i contenitori o il servizio. Segui di seguito per creare un servizio Docker Compose, avviare il servizio e infine fermare il servizio in modo adeguato.
1. Crea una directory per memorizzare il tuo file di configurazione. In questo esempio, la directory C:\Articles\Ubuntu conterrà il file.
2. Successivamente, crea il file docker-compose.yml, contenente la seguente configurazione. Il file Docker Compose qui sotto crea un servizio con due contenitori Ubuntu e, quando viene avviato, i contenitori non escono immediatamente.
3. In una sessione di terminale, vai alla directory del tuo file di configurazione Docker personalizzato, che in questo esempio è C:\Articoli\Ubuntu. Esegui il comando docker-compose up -d
per generare e avviare il servizio creato nel passaggio precedente in background come indicato dall’opzione -d
.

4. Nella stessa sessione di terminale e directory, emetti il comando docker-compose stop
per terminare il servizio e i contenitori in modo delicato.

Il comando
docker-compose
, come il comandodocker
, ha anche i parametrirm --force
ekill
. I parametri didocker-compose
agiscono sul servizio invece di un singolo contenitore. Il comandodocker-compose kill
ha anche un’opzione-s
per specificare il segnale di stop.
Conclusione
I container Docker sono uno strumento potente per creare ambienti unici e segmentati per lo sviluppo e l’uso in produzione. In questo articolo, hai appreso diversi modi in cui Docker ferma uno o più container, persino tutti. Hai anche appreso quale segnale di stop predefinito utilizza Docker e come modificarlo.
Con questa conoscenza, ora conosci tutti i dettagli su come fermare i container Docker e come evitare problemi quando è il momento di arrestare i container in esecuzione. Come pianifichi di fermare i tuoi container d’ora in poi, avendo acquisito questa nuova conoscenza?
Source:
https://adamtheautomator.com/docker-stop-containers/