Corso
Fermare i container uno per uno può rallentare il tuo workflow di sviluppo e portare a errori quando gestisci microservizi o applicazioni multi-container.
In questa guida, vedremo diversi metodi per terminare tutti i container in esecuzione.
Alla fine di questo tutorial, sarai in grado di:
- Capire come Docker gestisce i segnali e i periodi di attesa (grace period)
- Arrestare tutti i container usando semplici tecniche CLI e filtri
- Sfruttare Docker Compose e alias personalizzati per workflow più snelli
Comprendere la terminazione dei container Docker
Prima di fermare i container in blocco, è utile capired come Docker orchestra gli arresti sotto il cofano.
Gestione dei processi basata su segnali
Docker usa i segnali Unix per richiedere arresti graduali prima di forzare la terminazione. Il comportamento predefinito del comando docker stop è:
- Inviare
SIGTERMal processo principale del container. - Attendere fino a 10 secondi (configurabile con
-t/--time). - Inviare
SIGKILLse il processo non è uscito.
- SIGTERM: Chiede educatamente al processo di ripulire e uscire.
- Grace period: Concede alle applicazioni il tempo di scaricare i log, chiudere le connessioni o salvare lo stato.
- SIGKILL: Forza l'immediata terminazione di qualsiasi processo non responsivo.

Meccanismi della riga di comando (CLI)
Per impostazione predefinita, docker stop gestisce un container alla volta. Puoi estenderlo per fermare più container usando le funzionalità della shell.
# Stop a single container named my_container
docker stop my_container
Questo invia SIGTERM a my_container e attende i 10 secondi predefiniti prima di inviare SIGKILL, se necessario.
# Stop all running containers at once
docker stop $(docker ps -q)
Qui, docker ps -q elenca gli ID di tutti i container in esecuzione; quegli ID vengono passati a docker stop, che arresta i container in sequenza.

Screenshot di un terminale che mostra l'output di docker ps -q inviato in pipe a docker stop
Per comprendere più a fondo questi concetti, valuta di esplorare Containerization and Virtualization Concepts.
Confronto tra docker stop e docker kill
Scegliere tra terminazione graduale e forzata ti aiuta a evitare conseguenze indesiderate.
Terminazione graduale vs. immediata
|
Comando |
Segnale/i |
Comportamento |
Caso d'uso |
|
docker stop |
SIGTERM → SIGKILL dopo timeout |
Arresto graduale con tempo per le pulizie |
Manutenzione ordinaria o aggiornamenti |
|
docker kill |
SIGKILL |
Terminazione immediata |
Interventi d'emergenza su container bloccati |
Personalizzazione dei segnali
Entrambi i comandi supportano il flag --signal per sovrascrivere i valori predefiniti:
# Send SIGINT instead of SIGTERM
docker stop --signal=SIGINT my_container
Questo permette ai processi di intercettare SIGINT per pulizie personalizzate.
# Kill all containers with SIGUSR1
docker kill --signal=SIGUSR1 $(docker ps -q)
Come visto sopra, puoi usare segnali personalizzati quando la tua applicazione implementa hook di arresto specifici.
Strategie avanzate per fermare i container
Filtrare e automatizzare l'arresto dei container consente workflow DevOps più precisi, soprattutto in ambienti su larga scala.
Una volta compresi i fondamentali, puoi perfezionare quali container fermare e come automatizzare il processo.
Terminazione filtrata dei container
I filtri ti permettono di prendere di mira i container per attributi come nome dell'immagine, stato o etichette:
# Stop containers running the my_image:latest image
docker stop $(docker ps --filter "ancestor=my_image:latest" -q)
Il comando sopra ferma solo i container basati su my_image:latest, offrendo un controllo mirato in progetti multi-servizio.
Casi d'uso:
- Arrestare i container di test per tag di immagine (
--filter "ancestor=test:latest") - Fermare i container per etichetta (
--filter "label=env=dev")

Screenshot del terminale sull'uso di docker ps --filter
Pulizia automatizzata con Docker Compose
Se i tuoi servizi sono definiti in un file docker-compose.yml, un singolo comando ferma tutti i container correlati:
docker-compose stop
Questo rispetta le dipendenze dei servizi e i timeout configurati per un arresto pulito.
Per tecniche più avanzate, potresti considerare il corso Intermediate Docker.
Ottimizzazione del workflow con alias
Per attività ripetitive, gli alias della shell riducono digitazioni e cambi di contesto:
# Add this to ~/.bashrc or ~/.zshrc
alias ds='docker stop $(docker ps -q)'
Dopo aver ricaricato la shell, eseguire ds ferma tutti i container con una scorciatoia—ideale per una pulizia rapida.

Uso dell'alias 'ds' per fermare tutti i container in esecuzione su Ubuntu WSL
Best practice operative
Implementa routine di arresto sicure e pulizie regolari per mantenere l'ambiente stabile e performante.
- Implementa gestori di segnali nel codice della tua applicazione per chiudere connessioni e scaricare i log.
- Riserva
docker killagli interventi di emergenza; evita incongruenze nei dati. - Adatta i grace period (
-t/--time) in base alle esigenze di pulizia della tua applicazione. - Automatizza la pulizia post-arresto con comandi come
docker system prune, come descritto in Docker Prune: A Complete Guide with Hands-On Examples. - Registrare gli eventi di arresto (timestamp e codici di uscita) per diagnosticare problemi di terminazione.
Risoluzione dei problemi comuni
Anche comandi semplici possono incepparsi—ecco come affrontarli.
Processi zombie e volumi orfani
Le terminazioni forzate possono lasciare processi obsoleti o volumi orfani, consumando risorse dell'host e spazio su disco. Per pulire:
# Remove dangling volumes
docker volume prune
Questo elimina tutti i volumi non referenziati da alcun container.
Controlla la presenza di processi del demone Docker persistenti:
ps aux | grep dockerd
Termina manualmente eventuali processi figlio di dockerd se persistono.
Caso reale: in un progetto, ho usato docker kill su un container di database quando una migrazione si è bloccata. L'arresto improvviso ha impedito al DB di scaricare i log delle transazioni, corrompendo le tabelle InnoDB. Abbiamo dovuto ripristinare dai backup e riprodurre i binlog, causando oltre 30 minuti di downtime. Per evitarlo, preferisci docker stop con un timeout esteso o aggiungi gestori SIGTERM adeguati nella tua applicazione.
Errori di autorizzazione negata
Eseguire comandi Docker senza i privilegi corretti spesso genera errori:
- Anteponi
sudoai comandi o esegui come utente nel gruppodocker. - Aggiungi il tuo utente al gruppo
dockere rientra:
sudo usermod -aG docker $USER
Dopo aver fatto logout e login, potrai eseguire i comandi Docker senza sudo. In un ambiente CI, assicurati che l'utente del runner abbia l'appartenenza al gruppo Docker per evitare errori in pipeline.
Considerazioni specifiche per Windows
Su Windows PowerShell, racchiudi i sottocomandi tra parentesi ed esegui come Amministratore:
docker stop (docker ps -q)
Avviare PowerShell con diritti elevati evita problemi di firewall o controllo degli accessi. Se vedi errori di handshake TLS, verifica che la configurazione del demone di Docker Desktop corrisponda al tuo ambiente PowerShell.
Conclusione
Arrestare in modo efficiente tutti i tuoi container Docker fa risparmiare tempo, conserva risorse e riduce gli errori umani nel tuo workflow di sviluppo. Puoi mantenere un ambiente pulito e prevedibile comprendendo la gestione dei segnali di Docker, sfruttando i filtri CLI, usando Docker Compose e creando semplici alias.
Esplora il percorso Containerization and Virtualization with Docker and Kubernetes o il corso Intermediate Docker per approfondire la tua esperienza con la containerizzazione.
Buona containerizzazione—e brindiamo a workflow Docker puliti ed efficienti!
FAQ
Quale codice di uscita restituisce docker stop?
In caso di successo, docker stop restituisce 0. Un codice di uscita diverso da zero indica che uno o più container non sono stati fermati.
Posso visualizzare in anteprima quali container verranno fermati prima di eseguire il comando?
Sì—esegui docker ps o docker ps -q per elencare i container in esecuzione e verificare ID o nomi prima di eseguire docker stop.
In che modo le policy di riavvio influiscono sui container fermati?
I container con una policy di riavvio come always verranno riavviati automaticamente dopo l'arresto. Rimuovi o modifica la policy con docker update --restart=no <container> se vuoi che restino fermi.
C'è un modo per fermare i container per rete o volume?
Sebbene Docker non filtri direttamente per rete o volume con docker stop, puoi combinare docker ps --filter "network=<name>" o docker ps --filter "volume=<name>" con la sostituzione di comando.
Come posso integrare docker stop in una pipeline CI/CD?
Integra il comando di stop nei tuoi script di build o job CI—usa flag come --signal e i filtri per arresti mirati, poi prosegui con i comandi di pulizia (docker system prune) nella stessa pipeline.
Posso riavviare tutti i container fermati in seguito?
Sì, usa docker start $(docker ps -a -q) per riavviare tutti i container, inclusi quelli precedentemente fermati.
Fermare tutti i container li rimuove?
No, fermare i container non li elimina. Rimangono nel sistema finché non li rimuovi con docker rm.
Come posso automatizzare l'arresto dei container ogni giorno?
Usa un cron job con il comando docker stop $(docker ps -q) per programmare un arresto automatico.
docker stop influisce su volumi o reti?
No, fermare un container non influisce sui volumi o sulle reti collegate—rimangono intatti.
Posso escludere alcuni container dall'arresto?
Puoi fermare selettivamente i container usando docker ps con filtri o escludendo specifici ID di container dal comando.
Quali strumenti possono aiutare a gestire i container oltre ai comandi CLI?
Strumenti come Portainer o Docker Desktop offrono una gestione via GUI, rendendo il controllo dei container più semplice per i principianti.
Sono un data engineer e community builder: lavoro su pipeline dati, cloud e strumenti di AI, e scrivo tutorial pratici e ad alto impatto per DataCamp e per sviluppatori alle prime armi.


