Comment utiliser la commande docker container wait pour attendre l'arrêt des conteneurs

DockerDockerBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce lab, vous apprendrez à utiliser efficacement la commande docker container wait. Cet outil puissant est particulièrement utile pour le scripting et l'automatisation, car il permet de suspendre l'exécution jusqu'à ce qu'un conteneur spécifié se soit arrêté.

Vous commencerez par démarrer un conteneur Docker en arrière-plan en utilisant le mode détaché (-d). Ensuite, vous utiliserez docker container wait pour bloquer votre terminal jusqu'à ce que ce conteneur en arrière-plan termine son exécution. Pour démontrer le comportement de blocage, vous arrêterez le conteneur depuis un terminal séparé. Enfin, vous observerez le code de sortie renvoyé par la commande docker container wait, ce qui vous permettra de comprendre comment il indique l'état de terminaison du conteneur.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555128{{"Comment utiliser la commande docker container wait pour attendre l'arrêt des conteneurs"}} docker/ps -.-> lab-555128{{"Comment utiliser la commande docker container wait pour attendre l'arrêt des conteneurs"}} docker/stop -.-> lab-555128{{"Comment utiliser la commande docker container wait pour attendre l'arrêt des conteneurs"}} docker/pull -.-> lab-555128{{"Comment utiliser la commande docker container wait pour attendre l'arrêt des conteneurs"}} end

Démarrer un conteneur en arrière-plan

Dans cette étape, vous apprendrez comment démarrer un conteneur Docker en arrière-plan. L'exécution d'un conteneur en arrière-plan permet son fonctionnement sans occuper votre terminal, ce qui est utile pour les services ou applications de longue durée.

Commencez par télécharger l'image alpine. Il s'agit d'une image de distribution Linux très légère, idéale pour les tests.

docker pull alpine

Vous devriez voir une sortie indiquant que l'image est en cours de téléchargement.

Using default tag: latest
latest: Pulling from library/alpine
...
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest

Maintenant, nous allons démarrer un conteneur alpine en arrière-plan en utilisant l'option -d. L'option -d signifie "mode détaché". Nous exécuterons également une commande simple dans le conteneur, sleep 30, qui fera fonctionner le conteneur pendant 30 secondes avant de s'arrêter.

docker run -d alpine sleep 30

Après avoir exécuté cette commande, Docker affichera l'ID complet du conteneur.

<container_id>

Pour vérifier que le conteneur fonctionne bien en arrière-plan, vous pouvez utiliser la commande docker ps. Cette commande liste tous les conteneurs actuellement en cours d'exécution.

docker ps

Vous devriez voir une sortie similaire à celle-ci, montrant votre conteneur alpine en cours d'exécution :

CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
<container_id>   alpine    "sleep 30"    X seconds ago   Up X seconds             <container_name>

La colonne STATUS doit afficher Up suivi de la durée d'exécution du conteneur. Cela confirme que le conteneur fonctionne bien en mode détaché.

Utiliser docker container wait pour attendre l'arrêt du conteneur

Dans cette étape, vous apprendrez à utiliser la commande docker container wait. Cette commande bloque l'exécution jusqu'à ce qu'un ou plusieurs conteneurs s'arrêtent, puis affiche leurs codes de sortie. Cela est utile lorsque vous devez attendre la fin d'un processus en arrière-plan dans un conteneur avant de poursuivre d'autres tâches.

Commencez par récupérer l'ID du conteneur que nous avons démarré à l'étape précédente. Nous pouvons utiliser docker ps -q pour obtenir uniquement l'ID du conteneur en cours d'exécution.

docker ps -q

Cette commande affichera l'ID du conteneur. Copiez cet ID car vous en aurez besoin pour la commande suivante.

<container_id>

Maintenant, utilisez la commande docker container wait suivie de l'ID du conteneur que vous venez d'obtenir.

docker container wait <container_id>

Lorsque vous exécutez cette commande, votre terminal semblera bloqué. Ce comportement est normal. La commande docker container wait est bloquante, ce qui signifie qu'elle suspend l'exécution jusqu'à ce que le conteneur spécifié s'arrête. Comme le conteneur exécute actuellement la commande sleep 30, cette commande attendra jusqu'à 30 secondes que le conteneur se termine.

Une fois que le conteneur s'arrête (soit en terminant sa commande sleep 30, soit en étant arrêté manuellement), la commande docker container wait se débloque et affiche le code de sortie du conteneur.

Par exemple, si le conteneur s'arrête correctement après 30 secondes, vous verrez :

0

Un code de sortie 0 indique généralement que la commande à l'intérieur du conteneur s'est terminée avec succès.

Gardez cette fenêtre de terminal ouverte, car nous interagirons avec cette commande en attente dans l'étape suivante.

Arrêter le conteneur depuis un autre terminal

Dans cette étape, vous allez ouvrir un nouveau terminal et arrêter le conteneur en cours d'exécution. Cela démontrera comment la commande docker container wait dans le premier terminal réagit lorsque le conteneur est arrêté depuis l'extérieur.

Ouvrez une nouvelle fenêtre de terminal dans l'environnement LabEx. Vous pouvez généralement le faire en cliquant sur l'icône "+" ou en sélectionnant "Nouveau terminal" dans un menu.

Dans ce nouveau terminal, nous devons à nouveau identifier le conteneur en cours d'exécution. Utilisez docker ps pour lister les conteneurs actifs et trouver l'ID du conteneur.

docker ps

Vous verrez une sortie similaire à l'étape précédente, affichant l'ID du conteneur, l'image, la commande, etc.

CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
<container_id>   alpine    "sleep 30"    X minutes ago   Up X minutes             <container_name>

Maintenant, utilisez la commande docker stop suivie de l'ID du conteneur pour l'arrêter.

docker stop <container_id>

Vous devriez voir l'ID du conteneur s'afficher dans le terminal, confirmant que la commande d'arrêt a réussi.

<container_id>

Revenez à la première fenêtre de terminal où vous avez exécuté docker container wait. Vous devriez constater que la commande docker container wait s'est maintenant terminée et a affiché un code de sortie. Nous examinerons ce code de sortie dans l'étape suivante.

Observer le code de sortie de docker container wait

Dans cette dernière étape, nous allons examiner le code de sortie affiché par la commande docker container wait dans le premier terminal.

Revenez à la première fenêtre de terminal où vous avez exécuté la commande docker container wait <container_id>.

Vous devriez voir un nombre affiché sur la ligne suivant la commande. Ce nombre représente le code de sortie du conteneur.

137

À l'étape précédente, vous avez arrêté le conteneur en utilisant docker stop. Lorsqu'un conteneur est arrêté avec docker stop, Docker envoie d'abord un signal SIGTERM au processus principal du conteneur, puis après un délai de grâce, un signal SIGKILL si le processus ne s'est pas terminé. Un code de sortie 137 indique généralement qu'un processus a été terminé par un signal SIGKILL (128 + 9, où 9 est le numéro du signal SIGKILL).

Cela démontre que docker container wait non seulement attend l'arrêt du conteneur, mais fournit également le code de sortie, qui peut vous informer sur la manière dont le conteneur s'est arrêté. Si le conteneur avait terminé naturellement sa commande sleep 30, le code de sortie aurait été 0.

Vous pouvez vérifier que le conteneur est arrêté en exécutant docker ps -a dans l'un ou l'autre terminal. L'option -a affiche tous les conteneurs, y compris ceux qui sont arrêtés.

docker ps -a

Vous devriez voir votre conteneur alpine listé, avec un statut Exited (<exit_code>).

CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS                      PORTS     NAMES
<container_id>   alpine    "sleep 30"    X minutes ago    Exited (137) X seconds ago             <container_name>

Ceci conclut le labo sur l'utilisation de docker container wait. Vous avez appris à :

  • Démarrer un conteneur en arrière-plan
  • Attendre son arrêt avec docker container wait
  • L'arrêter depuis un autre terminal
  • Observer le code de sortie résultant

Résumé

Dans ce labo, vous avez appris à :

  • Démarrer un conteneur Docker en arrière-plan en utilisant l'option -d avec la commande docker run
  • Vérifier son statut avec docker ps
  • Explorer la commande docker container wait et comprendre son rôle : bloquer l'exécution jusqu'à l'arrêt d'un conteneur spécifié puis retourner son code de sortie