virli/tutorial/docker-basis/debug.md

82 lines
2.3 KiB
Markdown
Raw Normal View History

2022-09-15 09:07:41 +00:00
\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.
docker logs
-----------
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:
<div lang="en-US">
```bash
docker container logs 0a1b2c3d4e
```
</div>
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:
<div lang="en-US">
```bash
docker container exec -it mycloud /bin/bash
(inctnr)# hostname
0a1b2c3d4e5f
(inctnr)# ping mysql_cntr_name
...
```
</div>
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.
:::::
docker top
----------
Si plusieurs processus doivent s'exécuter dans un conteneur, un bon moyen de
savoir s'ils sont tous actifs est d'utiliser:
<div lang="en-US">
```bash
docker container top cntr_name
```
</div>
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`.