Accéder au contenu principal

Docker Arrêtez tous les conteneurs : Un guide pas à pas

Apprenez à arrêter tous les conteneurs Docker en cours d'exécution à l'aide de commandes simples. Cela vous aidera à gérer les ressources du système et à rationaliser votre environnement Docker.
Actualisé 16 juin 2025  · 5 min de lecture

L'arrêt des conteneurs un par un peut ralentir votre flux de développement et entraîner des erreurs lorsque vous jonglez avec des microservices ou des applications multi-conteneurs. 

Dans ce guide, j'aborderai plusieurs méthodes pour vous aider à mettre fin à tous les conteneurs en cours d'exécution.

À la fin de ce tutoriel, vous serez en mesure de :  

  • Comprendre comment Docker gère les signaux et les délais de grâce
  • Arrêtez tous les conteneurs à l'aide de techniques et de filtres CLI simples
  • Tirez parti de Docker Compose et d'alias personnalisés pour rationaliser les flux de travail. 

Comprendre la terminaison des conteneurs Docker

Avant d'arrêter les conteneurs en masse, il est utile de comprendrecomment Docker orchestre les arrêts sous le capot.

Gestion des processus basée sur les signaux

Docker utilise des signaux Unix pour demander des arrêts gracieux avant de forcer la fermeture. Le comportement par défaut de la commande docker stop est le suivant : 

  1. Envoyez SIGTERM au processus principal du conteneur.  
  2. Attendez jusqu'à 10 secondes (configurable avec -t/--time).  
  3. Envoyez SIGKILL si le processus n'est pas terminé.
  • SIGTERM: Demandez poliment au processus de se terminer et de se terminer.  
  • Délai de grâce: Donne aux applications le temps de vider les journaux, de fermer les connexions ou de sauvegarder l'état.  
  • SIGKILL: Force l'arrêt immédiat de tout processus qui ne répond pas.

Chronologie illustrant la séquence des signaux d'arrêt de Docker : SIGTERM, attente, puis SIGKILL.

Interface de ligne de commande (CLI)

Par défaut, docker stop gère un conteneur à la fois. Vous pouvez l'étendre pour arrêter plusieurs conteneurs en utilisant les fonctionnalités du shell.

# Stop a single container named my_container
docker stop my_container

Elle envoie SIGTERM à my_container et attend les 10 secondes par défaut avant d'envoyer SIGKILL si nécessaire.

# Stop all running containers at once
docker stop $(docker ps -q)

Ici, docker ps -q dresse la liste des identifiants de tous les conteneurs en cours d'exécution ; ces identifiants sont transmis à docker stop, qui arrête les conteneurs de manière séquentielle.

Session de terminal pipant docker ps -q dans docker stop pour arrêter tous les conteneurs.

Capture d'écran d'un terminal montrant la sortie de docker ps -q dans docker stop

Pour une compréhension plus détaillée de ces concepts, vous pouvez explorer les concepts de conteneurisation et de virtualisation.

Comparaison entre docker stop et docker kill

Choisir entre un licenciement gracieux et un licenciement forcé vous permet d'éviter des conséquences inattendues.

Licenciement gracieux ou immédiat

Commandement

Signal(s)

Comportement

Cas d'utilisation

docker stop

SIGTERM → SIGKILL après un délai d'attente

Arrêt progressif avec temps de nettoyage

Maintenance ou mises à jour de routine

docker kill

SIGKILL

Licenciement immédiat  

Assainissement d'urgence des conteneurs suspendus

Personnalisation du signal

Les deux commandes disposent d'un drapeau --signal qui permet d'ignorer les valeurs par défaut :

# Send SIGINT instead of SIGTERM
docker stop --signal=SIGINT my_container

Ce qui précède permet aux processus de piéger SIGINT pour un nettoyage personnalisé.

# Kill all containers with SIGUSR1
docker kill --signal=SIGUSR1 $(docker ps -q)

Comme nous l'avons vu plus haut, vous pouvez utiliser des signaux personnalisés lorsque votre application met en œuvre des crochets d'arrêt spécifiques.

Stratégies avancées d'arrêt des conteneurs

Le filtrage et l'automatisation de l'arrêt des conteneurs permettent des flux de travail DevOps plus précis, en particulier dans les environnements à grande échelle.  

Une fois que vous avez compris les principes de base, vous pouvez affiner les conteneurs que vous arrêtez et la manière dont vous automatisez le processus.

Terminaison du conteneur filtré

Les filtres vous permettent de cibler les conteneurs en fonction d'attributs tels que le nom de l'image, l'état ou les étiquettes :

# Stop containers running the my_image:latest image
docker stop $(docker ps --filter "ancestor=my_image:latest" -q)

La commande ci-dessus n'arrête que les conteneurs basés sur my_image:latest, ce qui permet un contrôle ciblé dans les projets multiservices.

Cas d'utilisation :  

  • Arrêter les conteneurs de test par balise d'image (--filter "ancestor=test:latest")  
  • Arrêter les conteneurs par étiquette (--filter "label=env=dev")

Filtrage de la sortie de docker ps par le nom de l'image ancestrale avant d'arrêter les conteneurs.

Capture d'écran du terminal de l'utilisation de docker ps --filter

Nettoyage automatisé avec Docker Compose

Si vos services sont définis dans un fichier docker-compose.yml, une seule commande permet d'arrêter tous les conteneurs concernés :

docker-compose stop

Cela respecte les dépendances de vos services et les délais configurés pour un arrêt propre.

Pour des techniques plus avancées, vous pouvez envisager le cours Intermediate Docker.

Optimisation du flux de travail à l'aide d'alias

Pour les tâches répétitives, les alias du shell réduisent la saisie et le changement de contexte :

# Add this to ~/.bashrc or ~/.zshrc
alias ds='docker stop $(docker ps -q)'

Une fois que vous avez rechargé votre shell, l'exécution de ds arrête tous les conteneurs en une seule touche, ce qui est idéal pour un nettoyage rapide.

Terminal montrant l'utilisation réussie d'un alias 'ds' personnalisé pour arrêter tous les conteneurs Docker en cours d'exécution dans Ubuntu WSL.

Utiliser l'alias 'ds' pour arrêter tous les conteneurs en cours d'exécution dans Ubuntu WSL

Meilleures pratiques opérationnelles

Mettez en œuvre des routines d'arrêt sûres et un nettoyage régulier pour que votre environnement reste stable et performant.

  • Mettez en œuvre des gestionnaires de signaux dans le code de votre application pour fermer les connexions et vider les journaux.  
  • Réservez le site docker kill aux interventions d'urgence ; évitez les incohérences dans les données.  
  • Ajustez les délais de grâce (-t/--time) en fonction des besoins de nettoyage de votre application.  
  • Automatisez le nettoyage après l'arrêt à l'aide de commandes telles que docker system prune, comme indiqué dans Docker Prune : Un guide complet avec des exemples pratiques.
  • Enregistrez les événements d'arrêt (horodatage et codes de sortie) pour diagnostiquer les problèmes de terminaison.

Dépannage des problèmes courants

Même les commandes simples peuvent se heurter à des obstacles - voici comment y remédier.

Processus zombies et volumes orphelins

Les terminaisons forcées peuvent laisser des processus périmés ou des volumes orphelins, qui consomment les ressources de l'hôte et l'espace disque. Nettoyer :

# Remove dangling volumes
docker volume prune

Cette opération supprime tous les volumes qui ne sont référencés par aucun conteneur.

Vérifiez la présence de processus de démon Docker persistants :

ps aux | grep dockerd

Tuez manuellement tout processus enfant dockerd s'il persiste.

Un cas concret : Dans un projet, j'ai utilisé docker kill sur un conteneur de base de données lorsqu'une migration a échoué. L'arrêt brutal a empêché la base de données de vider les journaux de transactions, ce qui a corrompu les tableaux InnoDB. Nous avons dû restaurer les sauvegardes et rejouer les binlogs, ce qui a coûté plus de 30 minutes de temps d'arrêt. Pour éviter cela, préférez docker stop avec un délai d'attente prolongé ou ajoutez des gestionnaires SIGTERM appropriés dans votre application.

Erreurs de refus d'autorisation

L'exécution de commandes Docker sans les privilèges appropriés déclenche souvent des erreurs :

  • Faites précéder les commandes de sudo ou exécutez-les en tant qu'utilisateur du groupe docker.  
  • Ajoutez votre utilisateur au groupe docker et reconnectez-vous :
sudo usermod -aG docker $USER

Après vous être déconnecté et reconnecté, vous pouvez exécuter des commandes Docker sans sudo. Dans un environnement de CI, assurez-vous que l'utilisateur du runner est membre du groupe Docker pour éviter les échecs de pipeline.

Considérations spécifiques à Windows

Dans Windows PowerShell, mettez les sous-commandes entre parenthèses et exécutez-les en tant qu'administrateur :

docker stop (docker ps -q)

Le lancement de PowerShell avec des droits élevés permet d'éviter les problèmes de pare-feu ou de contrôle d'accès. Si vous constatez des erreurs de prise de contact TLS, vérifiez que la configuration du démon de Docker Desktop correspond à votre environnement PowerShell.

Conclusion

L'arrêt efficace de tous vos conteneurs Docker permet de gagner du temps, de préserver les ressources et de minimiser les erreurs humaines dans votre flux de développement. Vous pouvez maintenir un environnement propre et prévisible en comprenant la gestion des signaux de Docker, en exploitant les filtres CLI, en utilisant Docker Compose et en créant des alias simples. 

Explorez le cursus Conteneurisation et virtualisation avec Docker et Kubernetes ou le cours Docker intermédiaire pour approfondir votre expertise en matière de conteneurisation.

Joyeux conteneurisation - et à des flux de travail Docker propres et efficaces !

Maîtriser Docker et Kubernetes

Apprenez la puissance de Docker et Kubernetes avec un cursus interactif pour construire et déployer des applications dans des environnements modernes.
Démarrer le cursus gratuitement

FAQ

Quel est le code de sortie renvoyé par docker stop ?

En cas de succès, docker stop renvoie 0. Un code de sortie non nul indique qu'un ou plusieurs conteneurs n'ont pas réussi à s'arrêter.

Puis-je avoir un aperçu des conteneurs qui seront arrêtés avant d'exécuter la commande ?

Oui-exécutez docker ps ou docker ps -q pour lister les conteneurs en cours d'exécution et vérifier les identifiants ou les noms avant de les exécuter. docker stop.

Comment les politiques de redémarrage affectent-elles les conteneurs arrêtés ?

Les conteneurs avec une politique de redémarrage comme always redémarreront automatiquement après l'arrêt. Supprimez ou modifiez la politique avec docker update --restart=no si vous voulez qu'ils restent arrêtés.

Existe-t-il un moyen d'arrêter les conteneurs par réseau ou par volume ?

Bien que Docker ne filtre pas directement par réseau ou par volume sur docker stopvous pouvez combiner docker ps --filter "network=" ou docker ps --filter "volume=" avec une substitution de commande.

Comment intégrer docker stop dans un pipeline CI/CD ?

Incorporez la commande stop dans vos scripts de construction ou vos travaux de CI - utilisez des drapeaux comme --signal et des filtres pour des arrêts ciblés, puis faites suivre par des commandes de nettoyage (docker system prune) dans le même pipeline.

Puis-je redémarrer ensuite tous les conteneurs arrêtés ?

Oui, utilisez docker start $(docker ps -a -q) pour redémarrer tous les conteneurs, y compris ceux qui ont été arrêtés précédemment.

L'arrêt de tous les conteneurs les éliminera-t-il ?

Non, l'arrêt des conteneurs ne les supprime pas. Ils restent sur votre système jusqu'à ce que vous les supprimiez à l'aide de docker rm.

Comment automatiser l'arrêt quotidien des conteneurs ?

Utilisez une tâche cron avec la commande docker stop $(docker ps -q) pour programmer un arrêt automatique.

L'arrêt de docker affecte-t-il les volumes ou les réseaux ?

Non, l'arrêt d'un conteneur n'affecte pas les volumes ou les réseaux attachés : ils restent intacts.

Puis-je exclure certains conteneurs de l'arrêt ?

Vous pouvez arrêter les conteneurs de manière sélective en utilisant docker ps avec des filtres ou en excluant des ID de conteneurs spécifiques de la commande.


Khalid Abdelaty's photo
Author
Khalid Abdelaty
LinkedIn

Data Engineer avec une expertise de Python et des technologies cloud Azure, spécialisé dans la construction de pipelines de données évolutifs et de processus ETL. Il poursuit actuellement une licence en informatique à l'université de Tanta. Ingénieur de données certifié DataCamp avec une expérience démontrée dans la gestion des données et la programmation. Ancien stagiaire Microsoft Data Engineer à Digital Egypt Pioneers Initiative et Microsoft Beta Student Ambassador animant des ateliers techniques et organisant des hackathons.

Sujets

Apprenez-en plus sur Docker avec ces cours !

Cursus

Containerization and Virtualization with Docker and Kubernetes

0 min
Learn the power of Docker and Kubernetes, this interactive track will allow you to build and deploy applications in modern environments.
Afficher les détailsRight Arrow
Commencer le cours
Voir plusRight Arrow