Vous rencontrez des problèmes avec les conteneurs d'arrêt Docker ? Trouver la bonne façon d'arrêter un conteneur est difficile avec la possibilité de créer de nombreux conteneurs différents. Dans cet article, vous apprendrez les commandes Docker pour arrêter un conteneur ou tous les conteneurs.
Lisez la suite pour en savoir plus !
Prérequis
Pour suivre ce didacticiel, assurez-vous que vous disposez des éléments suivants :
- Windows 10 :le didacticiel utilise Windows pour exécuter Docker, mais vous pouvez également appliquer les mêmes étapes générales à Linux ou macOS.
- Docker Desktop – Ce tutoriel utilise la version 3.5.2. Le moteur Docker est disponible si vous utilisez Linux car l'interface graphique ne l'est pas.
- Un ou plusieurs conteneurs Docker en cours d'exécution.
Fermer les conteneurs avec la commande docker stop Containers
Commençons par la première commande :le docker stop
conteneurs et comment elle accomplit l'arrêt des conteneurs.
Par exemple, vous devez peut-être arrêter un conteneur en cours d'exécution portant le nom mystifying_hofstadter
et un ID de fb66ed502096
. Comme indiqué dans l'exemple ci-dessous, arrêtez le conteneur avec le docker stop
commande conteneurs.
# Stop the container via the name
docker stop mystifying_hofstadter
# Stop the container via the ID (same container)
docker stop fb66ed50209
Que se passe-t-il si vous avez plusieurs conteneurs en cours d'exécution et que vous souhaitez les arrêter ? L'docker stop
La commande containers prend en charge l'arrêt de plusieurs ID de conteneur, un à la fois.
Tout d'abord, listez tous les conteneurs via le docker ps
commande et transmettez les ID de conteneur au docker stop
conteneurs, comme illustré ci-dessous.
# List all running containers
docker ps
# Stop the following Docker containers via the container ID
docker stop a427a21c5558 e9dbd816f24c 31269ef5999e
Que faire si vous souhaitez arrêter tous les conteneurs en cours d'exécution sans récupérer manuellement les ID de conteneur et les transmettre à docker stop
? Le docker ps -q
commande accomplira cela. Le -q
paramètre de docker ps
la commande affiche uniquement les ID des conteneurs.
# Create three containers. A semi-colon separates each command
docker run -d -t ubuntu; docker run -d -t ubuntu; docker run -d -t ubuntu
# List all running containers
docker ps -q
# Retrieve all running container IDs and pass those to docker stop
docker stop $(docker ps -q)
Le
$(docker ps -q)
La construction ci-dessus est une sous-expression dans Bash sous Linux et PowerShell sous Windows. Une sous-expression demande au shell de traiter un ensemble de commandes,docker ps -q
, d'abord, puis renvoyez l'ensemble des résultats à la commande d'originedocker stop
.
L'docker stop
La commande containers utilise le signal SIGTERM. Les signaux Linux informent un processus d'un événement, mais c'est au processus de décider comment agir sur un signal donné.
Lors de l'utilisation du signal SIGTERM, Docker utilise le signal pour arrêter gracieusement un processus en attendant un 10
par défaut secondes avant d'envoyer le signal SIGKILL, qui termine le processus immédiatement.
Arrêter un conteneur à l'aide de signaux de processus
Vous avez appris le comportement par défaut de Docker (signal d'arrêt), avec le docker stop
conteneurs, lors de l'arrêt d'un conteneur. Mais vous ne voudrez peut-être pas le comportement par défaut. Au lieu de cela, vous pouvez demander à Docker d'utiliser des signaux d'arrêt alternatifs.
Avec le docker run
commandes --stop-signal
flag, vous pouvez spécifier le signal d'arrêt lors du démarrage du conteneur. Cet indicateur définit le signal qui sera envoyé au conteneur en cours d'exécution lorsque vous souhaitez qu'il s'arrête.
Dans l'exemple ci-dessous, le --stop-signal
flag prend la valeur SIGQUIT
, qui indique à Docker d'envoyer le signal SIGQUIT lorsqu'il est temps d'arrêter le conteneur. L'exemple utilise également les paramètres suivants :
d
– Exécute le conteneur en mode détaché (arrière-plan). Le mode détaché ne permettra pas à l'utilisateur d'interagir immédiatement avec le conteneur puisque le processus s'exécute en arrière-plan.t
– alloue une console Pseudo-TTY (PTY), qui émule une vraie console de terminal dans le conteneur et empêche le conteneur Ubuntu de se fermer immédiatement. Le conteneur Ubuntu dans l'exemple nécessite une console PTY pour rester active en arrière-plan.- « nom de l'image » - Quelle image Docker pour provisionner le conteneur à partir de, dans ce cas, le
ubuntu
photo.
docker run -d -t --stop-signal SIGQUIT ubuntu
Vous pouvez également spécifier le signal d'arrêt à l'aide d'un Dockerfile, qui indique à Docker comment créer un conteneur. Vous pouvez ajouter une entrée au Dockerfile en spécifiant le signal d'arrêt avec
STOPSIGNAL SIGQUIT
, par exemple. Vous pouvez changer leSIGQUIT
avec n'importe quel signal d'arrêt que vous souhaitez.
Quitter les conteneurs immédiatement avec docker kill
Il y aura des moments où vous voudrez quitter les conteneurs sans leur accorder de période de grâce. Le docker kill
commande arrête immédiatement un conteneur.
L'exemple ci-dessous passe le conteneur avec l'ID 2aa318273db5
pour docker kill
. Le conteneur sortira immédiatement via le signal SIGKILL. Le conteneur ne sera pas autorisé à une sortie gracieuse. À la suite de la commande, le conteneur se fermera et l'ID du conteneur sera affiché.
docker kill 2aa318273db5
Docker tue tous les conteneurs avec la commande
docker kill $(docker ps -q)
. Notez que(docker ps -q
) est une sous-expression ici.
Arrêter et supprimer un conteneur avec docker rm
Par défaut, lorsque vous créez un conteneur, ce conteneur est construit comme avant :il est idempotent. La suppression d'un conteneur aura un impact minimal, et dans cet esprit, docker rm
peut forcer l'arrêt et retirer un conteneur. Docker émet un SIGKILL
signal au processus principal et supprime le conteneur de la liste des conteneurs disponibles sur votre installation Docker.
Si le conteneur doit conserver les fichiers internes modifiés ou si son état doit être conservé, la suppression d'un conteneur détruira ces modifications. Méfiez-vous des ratés potentiels !
Dans l'exemple suivant, vous avez peut-être démarré un conteneur qui a reçu le nom kind_galileo
. Avant de retirer un conteneur, le conteneur doit être arrêté, comme indiqué ci-dessous. Le docker ps -a
la commande affiche le statut Exited
pour l'exemple de conteneur.
Maintenant que le conteneur a cessé d'émettre le docker rm
supprimera entièrement le conteneur.
docker rm kind_galileo
Au lieu d'arrêter le conteneur pour ensuite supprimer le conteneur, la combinaison de --force
et docker rm
arrêtera et retirera le conteneur en une seule opération. Le conteneur, laughing_elion
, ne pourra plus être exécuté.
docker rm --force laughing_elion
Si vous ne spécifiez pas le
--force
commande, vous rencontrerez le message d'erreurError response from daemon: You cannot remove a running container...
Arrêter les conteneurs Docker avec Docker Compose
Les commandes Docker sont généralement utilisées sur un seul conteneur, mais vous pouvez créer un service avec plusieurs conteneurs fonctionnant de concert les uns avec les autres. L'outil Docker Compose vous permet de configurer un service composé de plusieurs conteneurs pour qu'ils fonctionnent ensemble.
Étant donné que les conteneurs d'un service sont conçus pour fonctionner ensemble, il est préférable d'arrêter l'ensemble du service lui-même plutôt que n'importe quel conteneur individuel.
Si vous avez un service exécuté avec plusieurs conteneurs, [docker-compose stop]
arrête le service sans enlever les conteneurs ou le service. Suivez les instructions ci-dessous pour créer un service Docker Compose, démarrer le service et finalement arrêter le service correctement.
1. Créez un répertoire pour stocker votre fichier de configuration. Dans cet exemple, le répertoire C:\Articles\Ubuntu stockera le fichier.
mkdir C:\Articles\Ubuntu
2. Ensuite, créez le fichier docker-compose.yml fichier contenant la configuration suivante. Le fichier Docker Compose ci-dessous crée un service avec deux conteneurs Ubuntu, et lorsqu'il est activé, les conteneurs ne se ferment pas immédiatement.
# The specification version of docker-compose
version: "3.9"
# The collection of applications composing this service
services:
# First Ubuntu Container
container1:
image: ubuntu
# Same as the -t option and allocates a Psuedo-TTY, so the container does not immediately exit.
tty: true
# Second Ubuntu Container
container2:
image: ubuntu
tty: true
3. Dans une session de terminal, accédez au répertoire de votre fichier de configuration Docker personnalisé, qui dans cet exemple est C:\Articles\Ubuntu . Exécutez le docker-compose up -d
pour générer et démarrer le service créé à l'étape précédente en arrière-plan comme indiqué par le -d
option.
4. Dans la même session de terminal et le même répertoire, lancez la commande docker-compose stop
pour terminer le service et les conteneurs en douceur.
Le
docker-compose
commande, comme ledocker
commande, a également lerm --force
etkill
paramètres. Ledocker-compose
les paramètres fonctionnent sur le service au lieu d'un seul conteneur. Ledocker-compose kill
la commande prend également une option-s
option pour spécifier le signal d'arrêt.
Conclusion
Les conteneurs Docker sont un outil puissant pour créer des environnements uniques et segmentés pour le développement et la production. Dans cet article, vous avez appris plusieurs façons dont Docker arrête un ou plusieurs conteneurs, voire tous. Vous avez également découvert le signal d'arrêt par défaut utilisé par Docker et comment le modifier.
Avec ces connaissances, vous connaissez maintenant les tenants et les aboutissants de l'arrêt des conteneurs Docker et comment ne pas vous tromper lorsqu'il est temps d'arrêter d'exécuter des conteneurs. Comment comptez-vous arrêter vos conteneurs à partir de maintenant, ayant cette nouvelle connaissance ?