Arrêter tous les conteneurs Docker - Le guide complet

Xavier Moreau .

19 mars 2026

Grue soulevant des conteneurs, un rouge "A Beginner's" et un bleu "Guide". Le logo Docker, une baleine bleue, est à droite.

Arrêter tous les conteneurs Docker sans casser le reste de l’environnement demande surtout de choisir le bon niveau d’action. Ici, je montre la commande la plus directe pour stopper les conteneurs actifs, les variantes plus fiables pour un script ou un alias, et la différence entre un arrêt propre, un arrêt forcé et une pile gérée par Compose. Je termine avec les pièges que je vois le plus souvent quand on travaille en DevOps sur une machine de dev, un serveur de test ou un poste partagé.

Les points essentiels à retenir avant d’arrêter tous les conteneurs

  • `docker ps -q` retourne uniquement les conteneurs en cours d’exécution.
  • `docker stop` envoie d’abord un signal propre, puis force l’arrêt si le délai expire.
  • Le délai par défaut est de 10 secondes sous Linux et de 30 secondes sous Windows.
  • `docker compose stop` arrête les services sans supprimer les conteneurs.
  • `docker compose down` va plus loin et retire aussi les réseaux créés par `up`, avec des options supplémentaires pour les volumes et les images.

Ce que l’arrêt global change vraiment

Quand j’arrête tous les conteneurs, je ne fais pas une suppression. Je demande d’abord à Docker d’envoyer un signal d’arrêt au processus principal, puis je lui laisse un délai pour quitter proprement. Si le processus ne répond pas, Docker finit par forcer l’arrêt avec un signal plus brutal. C’est une nuance importante, parce qu’elle évite les coupures sèches sur des services qui ont besoin de fermer une connexion, d’écrire un état ou de terminer un traitement en cours.

Par défaut, le conteneur reçoit un signal de type SIGTERM, puis Docker attend avant de passer à SIGKILL. D’après la documentation Docker, le délai standard est de 10 secondes sous Linux et de 30 secondes sous Windows si rien n’a été configuré au niveau du conteneur. C’est généralement suffisant pour des services bien conçus, mais trop court pour une base de données en charge ou un traitement long. Si j’ai un doute, j’allonge temporairement le délai avec `-t` au lieu de forcer l’arrêt.

Le point le plus souvent mal compris, c’est que l’arrêt ne supprime pas les conteneurs ni leurs volumes. Les données persistées dans un volume nommé restent en place. Autrement dit, couper tous les conteneurs est une opération de contrôle, pas une remise à zéro. C’est exactement ce qu’on veut dans beaucoup de cas DevOps, surtout quand on prépare un redéploiement ou un diagnostic. La question suivante devient donc très concrète: quelle commande taper pour viser uniquement les conteneurs actifs?

Commande Effet Quand je l’utilise
docker stop Arrêt propre d’un ou plusieurs conteneurs en cours d’exécution Quand je veux couper sans casser l’état interne
docker kill Arrêt forcé via signal de type SIGKILL Quand un conteneur refuse de quitter proprement
docker compose stop Arrêt des services d’un projet Compose, sans suppression Quand la pile est pilotée par Compose
docker compose down Arrêt et suppression des conteneurs, réseaux, et éventuellement volumes/images selon les options Quand je veux remettre un environnement à plat

La commande la plus simple pour arrêter tous les conteneurs actifs

Pour la plupart des cas, je pars de cette forme:

docker stop $(docker ps -q)

La logique est simple: docker ps -q renvoie seulement les identifiants des conteneurs en cours d’exécution, puis docker stop les arrête un par un. Je n’ai donc pas besoin de la variante -a ici, parce que docker ps -a liste aussi les conteneurs déjà stoppés. Les inclure n’apporte rien à l’arrêt global et produit surtout du bruit inutile.

Je préfère cette commande pour un usage ponctuel en terminal, parce qu’elle est lisible et directe. En revanche, elle a un défaut classique: si aucun conteneur ne tourne, la substitution de commande peut devenir vide et docker stop se plaindre d’un manque d’arguments. Ce n’est pas grave dans un usage manuel, mais dans un script, je veux quelque chose de plus robuste.

Besoin Commande Remarque
Arrêt rapide en interactif docker stop $(docker ps -q) Simple, clair, mais pas idéal si la liste est vide
Arrêt dans un script Linux docker ps -q | xargs -r docker stop -r évite d’appeler docker stop sans argument
Version portable en shell ids=$(docker ps -q); [ -n "$ids" ] && docker stop $ids Je la garde quand je veux éviter les surprises entre shells

Ce point paraît mineur, mais il fait gagner du temps: dans un environnement de dev où les conteneurs démarrent et s’arrêtent souvent, une commande qui tolère la liste vide est plus agréable à automatiser. C’est aussi la raison pour laquelle je passe volontiers à une fonction shell dès que je répète l’opération plusieurs fois par jour.

Rendre la commande fiable dans un script ou un alias

Pour un usage répétitif, je préfère une petite fonction shell plutôt qu’un copier-coller à la main. Elle permet d’ajouter un garde-fou, de documenter l’intention et d’éviter les erreurs quand il n’y a rien à arrêter. Voici une version simple et portable:

dstopall() {
  ids=$(docker ps -q)
  [ -n "$ids" ] && docker stop $ids
}

Cette forme me plaît parce qu’elle dit exactement ce qu’elle fait: elle récupère les conteneurs actifs, teste s’il y en a, puis les arrête. Sur Linux GNU, xargs -r est pratique et compact. Sur macOS ou dans un environnement où xargs ne propose pas -r, le test shell reste plus sûr. C’est un détail, mais en DevOps les détails de portabilité finissent toujours par compter.

Si je veux aller un peu plus vite sans sacrifier la lisibilité, je peux aussi créer un alias de confort. Je le réserve toutefois aux usages très simples, parce qu’un alias devient vite opaque dès qu’on ajoute une condition, un délai ou une journalisation. Dès que le comportement doit être explicite, je reviens à une fonction. Et si les services sont gérés par Compose, je ne m’acharne pas à tout arrêter globalement: je passe par l’outil du projet.

Docker Compose change la logique

Quand une application est décrite dans un fichier Compose, je préfère arrêter la pile avec docker compose stop. C’est la commande la plus cohérente pour un projet multi-conteneurs, parce qu’elle cible les services du projet au lieu de viser tous les conteneurs du host. La documentation Docker indique aussi que Compose arrête les services dans l’ordre de dépendance, ce qui évite de couper un backend avant son proxy ou sa couche applicative.

La vraie alternative, c’est docker compose down. Là, on change d’échelle: on arrête les conteneurs, puis on supprime aussi les conteneurs et les réseaux créés par up. Avec certaines options, on peut aller plus loin et retirer des volumes ou des images. C’est utile pour repartir de zéro, mais je le considère comme une opération de nettoyage, pas comme un simple arrêt.

Commande Compose Effet Mon usage
docker compose stop Arrête les services sans supprimer les conteneurs Pause temporaire, maintenance courte, reprise avec start
docker compose down Arrête et supprime les conteneurs et les réseaux créés par up Remise à plat d’un environnement
docker compose down -v Ajoute la suppression des volumes nommés déclarés dans le fichier et des volumes anonymes attachés Réinitialisation complète, à utiliser avec prudence

Le point de vigilance ici, c’est la donnée. Un down -v peut faire disparaître ce que l’on pensait conserver, alors que l’arrêt simple ne touche pas aux volumes. Les volumes externes, eux, ne sont pas supprimés par défaut, ce qui est rassurant pour les bases ou les données partagées entre environnements. Quand j’ai un doute, je relis la configuration avant d’appuyer sur la touche entrée.

Les pièges que je vois le plus souvent

Le premier piège, c’est de confondre docker ps et docker ps -a. Le premier montre les conteneurs qui tournent encore; le second ajoute ceux qui sont déjà arrêtés. Pour arrêter tout ce qui tourne, je me limite au premier. Pour inspecter l’ensemble de l’état du host, j’utilise le second, mais pas pour lancer un arrêt en masse.

Le deuxième piège, c’est le conteneur qui redémarre tout seul. Si une politique de redémarrage est configurée, notamment avec always ou unless-stopped, l’arrêt manuel ne raconte pas toute l’histoire. Docker documente bien ce comportement: un conteneur stoppé manuellement n’est pas relancé immédiatement par la politique, mais il peut revenir après un redémarrage du daemon selon la stratégie choisie. Dans un environnement de prod, je vérifie donc la politique avant de croire qu’un simple stop suffira à figer l’état.

Le troisième piège, c’est le processus qui refuse de s’éteindre proprement. Là, je ne commence pas par docker kill sur tout le monde. J’essaie d’abord d’identifier le conteneur récalcitrant, puis je le force uniquement si le service ne respecte pas le délai de shutdown. C’est plus propre, et ça évite de transformer un incident local en coupure globale.

Enfin, beaucoup de gens pensent que l’arrêt global nettoie l’espace disque. Ce n’est pas le cas. Pour supprimer les conteneurs déjà arrêtés, je passe par docker container prune. Docker précise d’ailleurs que cette commande cible uniquement les conteneurs stoppés. C’est exactement pour cela qu’il ne faut pas mélanger arrêt, suppression et nettoyage dans un seul réflexe automatique.

Symptôme Cause probable Ce que je fais
Erreur sur une commande vide Aucun conteneur ne tourne Je teste la présence d’IDs avant d’appeler docker stop
Un service revient après coup Politique de redémarrage ou orchestration Je regarde la stratégie de redémarrage et le niveau d’orchestration
Le conteneur ne s’arrête pas Shutdown trop lent ou processus bloqué J’augmente temporairement le délai ou je force le stop sur ce conteneur seulement
Le disque reste plein après l’arrêt Les conteneurs stoppés occupent encore de l’espace Je nettoie ensuite avec docker container prune si c’est justifié

Le réflexe que j’applique avant de tout couper sur une machine de dev

Sur une machine de développement, je procède presque toujours dans le même ordre. D’abord, je vérifie ce qui tourne avec docker ps. Ensuite, j’arrête proprement les conteneurs actifs. Si la stack est pilotée par Compose, je passe directement par docker compose stop ou, si je veux repartir d’une base propre, par docker compose down. Ce découpage m’évite de faire un arrêt global alors qu’un projet est isolé d’un autre.

Quand je sais que je vais relancer les services rapidement, je m’arrête là. Quand je veux libérer de l’espace ou repartir d’un environnement net, j’ajoute un nettoyage ciblé des conteneurs stoppés, puis je vérifie que les volumes que je veux conserver sont bien nommés ou externes. C’est une discipline simple, mais elle évite la plupart des accidents inutiles.

Au fond, la bonne pratique n’est pas de mémoriser une seule commande magique, mais de choisir le bon niveau d’action: arrêt propre, arrêt forcé, arrêt de projet, ou nettoyage. C’est cette hiérarchie qui rend la gestion des conteneurs prévisible, surtout quand on travaille vite et sur plusieurs services à la fois.

Questions fréquentes

La commande la plus simple est `docker stop $(docker ps -q)`. Elle identifie les conteneurs en cours d'exécution et les arrête proprement. Pour un script, utilisez `docker ps -q | xargs -r docker stop` pour plus de robustesse.
`docker stop` envoie un signal SIGTERM, permettant au conteneur de s'arrêter proprement dans un délai (10s Linux, 30s Windows). Si le conteneur ne répond pas, Docker force l'arrêt. `docker kill` envoie directement un signal SIGKILL, forçant l'arrêt immédiat sans délai.
`docker compose stop` arrête les services d'un projet Compose sans supprimer les conteneurs ou les réseaux. `docker compose down` va plus loin en arrêtant et en supprimant les conteneurs, les réseaux, et potentiellement les volumes et images, pour remettre l'environnement à plat.
Non, un simple arrêt ne supprime pas les conteneurs ni leurs volumes persistants. Les données stockées dans des volumes nommés restent intactes. Seul `docker compose down -v` ou `docker container prune` (pour les conteneurs arrêtés) peut supprimer des données.
Vérifiez d'abord si une politique de redémarrage est configurée. Si le processus est bloqué, essayez d'augmenter le délai d'arrêt avec l'option `-t` de `docker stop`. En dernier recours, utilisez `docker kill` sur le conteneur récalcitrant, mais évitez de l'appliquer globalement.

Évaluer l'article

Moyenne: 0.0 / 5 · 0 évaluations

Tags

docker stop all containers arrêter tous les conteneurs docker commande docker stop tous les conteneurs comment arrêter tous les conteneurs docker
Autor Xavier Moreau
Xavier Moreau
Je m'appelle Xavier Moreau et je cumule 14 ans d'expérience dans le développement web, avec un accent particulier sur JavaScript, le backend, le NoSQL et la sécurité. Mon intérêt pour ces domaines a émergé dès mes débuts dans la programmation, où j'ai découvert la puissance des technologies web et leur capacité à transformer des idées en réalité. J'aime expliquer des concepts complexes de manière accessible, en aidant les lecteurs à naviguer dans les défis techniques qu'ils rencontrent. Au fil des ans, j'ai développé une expertise solide en vérifiant mes sources, en comparant les informations et en simplifiant des sujets parfois ardus. Je m'efforce toujours de fournir des contenus utiles, précis et à jour, en suivant les tendances du secteur et en organisant mes connaissances de manière claire. Mon objectif est d'accompagner les passionnés et les professionnels du développement web dans leur quête de compréhension et d'innovation.

Commentaires (0)

Ajouter un commentaire