Ce que tu vas faire
Un conteneur est un programme qui tourne dans sa propre petite boîte fermée, avec ses propres fichiers. Les vrais systèmes sont faits de plusieurs conteneurs qui travaillent ensemble. Quand l'un s'arrête, on commence par regarder ce qui tourne, lire ce qu'il a dit et jeter un œil chez ses voisins. Ton lab a trois conteneurs, et l'un d'eux ne démarre pas. Tu vas trouver pourquoi, corriger le problème et le relancer, avec seulement les quatre commandes docker que ce terminal autorise.
Avant de commencer
Remarque
Appuie sur Démarrer le lab dans la barre en haut de cette leçon et attends qu'il indique qu'il tourne. Les trois conteneurs s'appellent web, cache et worker, et docker ne parle que d'eux dans ce terminal. Chaque bouton Exécuter ci-dessous tape sa commande dans le terminal de ton lab, l'une après l'autre dans la même session. Pour les suivre, ou pour taper tes propres commandes, appuie sur Ouvrir le terminal (nouvel onglet) dans la barre.
1. Voir ce qui tourne et lire le journal
docker ps -a liste tous les conteneurs, même ceux qui sont arrêtés. Lis la colonne STATUS : web et cache indiquent Up et (healthy), et worker indique Exited (1), donc il s'est arrêté dès son démarrage. Un simple docker ps ne l'aurait pas montré du tout. Un conteneur arrêté garde son journal (le « log »), et la deuxième commande l'affiche : la première ligne commence par worker: cannot start et dit que son fichier de réglages n'a pas de ligne QUEUE_HOST.
docker ps -aAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
docker logs workerAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
2. Regarder chez un voisin, corriger et relancer
Tu ne peux pas entrer dans un conteneur arrêté, mais web partage avec lui le dossier des réglages, un volume nommé. docker exec lance une commande à l'intérieur d'un conteneur qui tourne : la première affiche le fichier de réglages, quatre lignes qui finissent par POLL_SECONDS=5. La deuxième ajoute la ligne qui manque, en nommant le service qui garde la file d'attente, cache. (Pour avoir un shell à l'intérieur, tape docker exec -it web sh dans ton propre terminal.) Ensuite docker restart worker le redémarre et affiche son nom.
docker exec web cat /settings/worker.confAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
docker exec web sh -c "echo QUEUE_HOST=cache >> /settings/worker.conf"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
docker restart workerAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
3. Vérifier, et voir ce qui reste
Maintenant worker indique Up, et pendant quelques secondes (health: starting) avant (healthy) : relance la commande si ça n'a pas encore changé. Si tu tapes docker logs worker dans ton propre terminal, le journal se termine maintenant par des lignes worker: finished job. Puis appuie sur Arrêter le lab dans la barre, puis sur Démarrer le lab de nouveau, et lance docker ps -a : le worker démarre tout de suite en bonne santé, parce que ta ligne est dans le volume nommé. Tout ce que tu aurais écrit dans un conteneur en dehors de /settings aurait disparu : c'est ainsi que se comportent les conteneurs, partout.
docker psAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Pour les enseignants
Astuce
Cette leçon est un petit exemple de leçon travaillée dans un lab : les étapes et les boutons Exécuter sont la leçon, et le lab est la copie personnelle de chaque élève. Le lab compte trois services et un volume nommé, et rien ici ne se corrige tout seul : l'élève rend le résultat de docker ps -a avant et après la correction, la ligne du journal qui lui a dit ce qui n'allait pas, et une phrase sur ce qui survit à l'arrêt du lab. Copiez-la dans votre propre module et modifiez-la, ou construisez-en une de zéro avec le menu Lab du créateur de leçons.