3.7 KiB
\newpage
Intervenir durant l'exécution
Lorsque nous lançons un conteneur, il arrive que son comportement nous échappe : une imprécision dans la documentation, un cas particulier, une erreur de configuration, ... Lorsque le conteneur est en cours d'exécution, il y a plusieurs manières de contrôler ce qu'il se passe.
Consulter les journaux
La première étape consiste bien souvent à regarder ce que le conteneur affiche sur ses sorties standard et d'erreur. Lorsqu'il est lancé en monde daemon, il convient d'utiliser la commande :
Cela affichera l'intégralité des journaux depuis la création du conteneur.
En ajoutant l'option --follow
lorsque le conteneur est actif, cela laissera
la commande active logs
pour afficher en direct les nouvelles lignes
inscrites sur les sorties du conteneur.
Entrer dans un conteneur en cours d'exécution
Dans certaines circonstances, les journaux ne sont pas suffisants pour déboguer correctement l'exécution d'un conteneur.
En réalisant les exercices, vous serez sans doute confronté à des comportements étranges, que vous ne pourriez comprendre qu'en ayant la main sur le conteneur, à travers un shell.
Lorsqu'un conteneur est actif, vous pouvez y lancer un nouveau processus, notamment un shell par exemple :
On peut aussi imaginer lancer régulièrement une commande par ce biais : pour déclencher une sauvegarde d'un conteneur serveur de base de données ou pour exécuter une tâche périodique.
::::: {.question}
Il n'est pas possible d'exec
dans un conteneur éteint. Aussi, si la commande
initiale du conteneur se termine, tous les exec
seront instantanément tués.
:::::
Voir les processus
Si plusieurs processus doivent s'exécuter dans un conteneur, un bon moyen de savoir s'ils sont tous actifs est d'utiliser :
Cela liste tous les processus rattaché au conteneur nommé : à la fois les
processus démarrés par le run
, mais également les éventuels processus
rattachés par exec
.
Inspecter les propriétés
Pour aller plus loin, découvrons la commande permettant d'afficher les propriétés internes des objets Docker.
Peut-être avez-vous encore un conteneur youp0m
actif ?
docker container inspect 0a1b2c3d4e5f [ { "Id": "0a1b2c3d4e5f...", "Created": "2032-06-31T18:42:23.0123456789Z", ...
</div>
Le retour de cette commande va afficher un long enregistrement JSON, rempli
d'informations importantes pour Docker. Nous y retrouvons par exemple
l'emplacement réel des points de montage du système de fichiers de notre
conteneur, les réseaux rejoints, les ports exposés, la commande par
défaut, ... et tant d'autres choses.
Du fait que la commande retourne un objet JSON, nous pouvons facilement
réutiliser cette sortie en la passant à l'utilitaire `jq` :
<div lang="en-US">
```bash
42sh$ docker container inspect 0a1b2c3d4e5f | \
jq -r '.NetworkSettings.Ports["8080/tcp"][0].HostPort'
49153
Cela peut aussi être fait avec l'option --format
, qui utilise la syntaxe des
templates du langage Go :