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.
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 :
Envoyez SIGTERM au processus principal du conteneur.
Attendez jusqu'à 10 secondes (configurable avec -t/--time).
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.
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_containerdocker stop my_containerPropulsé par
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 oncedocker stop $(dockerps-q)Propulsé par
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.
Capture d'écran d'un terminal montrant la sortie de docker ps -q dans docker stop
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 SIGTERMdocker stop --signal=SIGINT my_containerPropulsé par
Ce qui précède permet aux processus de piéger SIGINT pour un nettoyage personnalisé.
# Kill all containers with SIGUSR1dockerkill--signal=SIGUSR1 $(dockerps-q)Propulsé par
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 imagedocker stop $(dockerps--filter"ancestor=my_image:latest"-q)Propulsé par
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")
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 :
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 ~/.zshrcaliasds='docker stop $(docker ps -q)'Propulsé par
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.
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.
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 volumesdocker volume prunePropulsé par
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 :
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 :
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 :
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.
Joyeux conteneurisation - et à des flux de travail Docker propres et efficaces !
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.
Quels outils peuvent aider à gérer les conteneurs au-delà des commandes CLI ?⌄
Des outils tels que Portainer ou Docker Desktop offrent une gestion basée sur une interface graphique, ce qui facilite le contrôle des conteneurs pour les débutants.
Apprenez l'essentiel de l'architecture d'un entrepôt de données, des composants clés aux meilleures pratiques, pour construire un système de données évolutif et efficace !
Tutoriel complet d'introduction aux boucles Python. Apprenez et pratiquez les boucles while et for, les boucles imbriquées, les mots-clés break et continue, la fonction range et bien plus encore.
Apprenez à utiliser JSON en Python, notamment la sérialisation, la désérialisation, le formatage, l'optimisation des performances, la gestion des API, ainsi que les limites et les alternatives de JSON.
Découvrez Docker et son importance dans la boîte à outils du professionnel des données. Découvrez les conteneurs Docker, les images et bien plus encore.
Découvrez toute la puissance de Docker et Kubernetes : ce cursus interactif vous permettra de créer et de déployer des applications dans des environnements modernes.
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 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 stopest le suivant :SIGTERMau processus principal du conteneur.-t/--time).SIGKILLsi le processus n'est pas terminé.Interface de ligne de commande (CLI)
Par défaut,
docker stopgère un conteneur à la fois. Vous pouvez l'étendre pour arrêter plusieurs conteneurs en utilisant les fonctionnalités du shell.Elle envoie SIGTERM à
my_containeret attend les 10 secondes par défaut avant d'envoyer SIGKILL si nécessaire.Ici,
docker ps -qdresse 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.Capture d'écran d'un terminal montrant la sortie de
docker ps -qdansdocker stopPour 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
--signalqui permet d'ignorer les valeurs par défaut :Ce qui précède permet aux processus de piéger
SIGINTpour un nettoyage personnalisé.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 :
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 :
--filter "ancestor=test:latest")--filter "label=env=dev")Capture d'écran du terminal de l'utilisation de
docker ps --filterNettoyage 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 :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 :
Une fois que vous avez rechargé votre shell, l'exécution de
dsarrête tous les conteneurs en une seule touche, ce qui est idéal pour un nettoyage rapide.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.
docker killaux interventions d'urgence ; évitez les incohérences dans les données.-t/--time) en fonction des besoins de nettoyage de votre application.docker system prune, comme indiqué dans Docker Prune : Un guide complet avec des exemples pratiques.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 :
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 :
Tuez manuellement tout processus enfant
dockerds'il persiste.Un cas concret : Dans un projet, j'ai utilisé
docker killsur 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érezdocker stopavec un délai d'attente prolongé ou ajoutez des gestionnairesSIGTERMapproprié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 :
sudoou exécutez-les en tant qu'utilisateur du groupedocker.dockeret reconnectez-vous :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 :
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 !