Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Lire les réglages et les journaux d’un conteneur

Après cette leçon: Je peux trouver comment un conteneur a été réglé et ce qu’il a dit.

Leçon de 50 min9 commandesLab Docker : apprendre conteneurs, journaux et redémarrages en réparant un service en panne

Une panne à neuf heures du soir

Un conteneur laisse deux traces : ses réglages, que lit docker inspect, et son journal, que lit docker logs. Elles disent pourquoi il est tombé.

La page d’une boutique affiche une erreur. La personne qui l’a construite dort. C’est vous qui êtes d’astreinte, et vous ne pouvez rien lui demander.

Tout se trouve sur la machine. Il y a ce qu’on a dit au programme de faire, et ce que le programme a dit pendant qu’il tournait.

À la fin de cette leçon

Remarque

Je peux trouver comment un conteneur a été réglé et ce qu’il a dit.

Mots-clés

MotCe que ça veut direExemple
Inspecterlire tous les réglages d’un conteneur
Journal (log)les messages qu’un programme écrit pendant qu’il tourne
Code de sortiele nombre qu’un programme donne en s’arrêtant ; 0 veut dire succès
Test de santéun test que Docker répète pour voir si un service répond encore
Variable d’environnementun réglage nommé donné à un programmeNGINX_VERSION

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

docker inspect lit les réglages d’un conteneur

docker ps montre quelques colonnes. docker inspect montre tout ce que Docker sait d’un conteneur, en JSON.

On en lit rarement la totalité. --format choisit un champ, écrit entre doubles accolades. Les quatre commandes suivantes lisent l’image, les portes, la limite de mémoire et une variable d’environnement de web.

Quelle image web fait-il tourner ?

Commande
docker inspect --format '{{.Config.Image}}' web

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.

Quelles portes dit-il utiliser ?

Commande
docker inspect --format '{{json .Config.ExposedPorts}}' web

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.

Combien de mémoire peut-il prendre, en octets ?

Commande
docker inspect --format '{{.HostConfig.Memory}}' web

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.

Lire une variable d’environnement dedans

Commande
docker exec web printenv NGINX_VERSION

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.

Exemple travaillé : qui a réglé quoi

ÉlémentQui l’a régléComment le lire
L’imagela personne qui a démarré le conteneurConfig.Image
Les portes (ports)l’auteur de l’image, dans le DockerfileConfig.ExposedPorts
La limite de mémoirele fichier compose du laboHostConfig.Memory
NGINX_VERSIONl’auteur de l’image, dans le Dockerfiledocker exec web printenv NGINX_VERSION

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Une erreur fréquente

Attention

On croit souvent que docker ps montre tout d’un conteneur. Il en montre un résumé. L’utilisateur sous lequel il tourne, ses limites, son environnement et sa santé ne sont que dans docker inspect. Utilisez ps pour trouver le conteneur et inspect pour l’interroger.

Un journal garde ce que le programme dit

Le journal d’un conteneur est tout ce que son programme principal a affiché. docker logs le montre.

Un service occupé écrit beaucoup. Dans ce labo, un test de santé appelle web toutes les quelques secondes, et chaque appel fait une ligne. On filtre donc. Demandez d’abord une page qui n’existe pas.

Demander à web une page absente

Commande
curl -s -o /dev/null -w "%{http_code}\n" http://web/missing

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.

Retrouver cette demande dans le journal

Commande
docker logs web 2>&1 | grep "/missing"

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.

Code de sortie et santé : comment ça finit

Un conteneur tourne, ou il s’est arrêté. Quand il s’arrête, son code de sortie dit comment. Zéro veut dire que tout s’est bien fini. Tout autre nombre veut dire un échec.

Un test de santé est un test que Docker répète pendant que le conteneur tourne. Le résultat est healthy ou unhealthy.

web tourne-t-il ? Quel est son code de sortie ?

Commande
docker inspect --format '{{.State.Status}} {{.State.ExitCode}}' web

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.

web réussit-il son test de santé ?

Commande
docker inspect --format '{{.State.Health.Status}}' web

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.

Quelle mémoire web utilise-t-il maintenant ?

Commande
docker stats --no-stream --format "{{.Name}} {{.MemUsage}}" web

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.

Exemple travaillé : quatre questions en cas de panne

QuestionCommandeCe que montrerait une tâche « rapport » arrêtée
Tourne-t-il ?docker ps -aExited (137) il y a une minute
Comment a-t-il fini ?docker inspect --format '{{.State.ExitCode}}' rapport137 : il a été tué
Qu’a-t-il dit en dernier ?docker logs --tail 5 rapportune ligne sur un manque de mémoire
Qu’avait-on réglé ?docker inspect --format '{{.HostConfig.Memory}}' rapportune limite trop petite pour la tâche

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Pour aller plus loin

Le worker du labo s’est arrêté. Vous avez maintenant les quatre questions pour lui : son statut, son code de sortie, son journal et ses réglages. La tâche du labo est d’y répondre et de le réparer.

Avant cela, lancez docker inspect web sans --format. Repérez les trois grandes parties : Config, State et HostConfig.

À propos de ce labo et de sa source: Lab Docker : apprendre conteneurs, journaux et redémarrages en réparant un service en panne

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.