Recherche…


Syntaxe

  • docker stats [OPTIONS] [CONTAINER ...]
  • docker logs [OPTIONS] CONTAINER
  • docker top [OPTIONS] CONTAINER [ps OPTIONS]

Entrer dans un conteneur en cours d'exécution

Pour exécuter des opérations dans un conteneur, utilisez la commande docker exec . Parfois, cela s'appelle "entrer dans le conteneur" car toutes les commandes sont exécutées à l'intérieur du conteneur.

docker exec -it container_id bash

ou

docker exec -it container_id /bin/sh

Et maintenant, vous avez un shell dans votre conteneur en cours d'exécution. Par exemple, répertoriez les fichiers dans un répertoire, puis quittez le conteneur:

docker exec container_id ls -la

Vous pouvez utiliser le -u flag pour entrer le conteneur avec un utilisateur spécifique, par exemple uid=1013 , gid=1023 .

docker exec -it -u 1013:1023 container_id ls -la

L'ID utilisateur et le gid ne doivent pas nécessairement exister dans le conteneur, mais la commande peut générer des erreurs. Si vous souhaitez lancer un conteneur et entrer immédiatement à l'intérieur pour vérifier quelque chose, vous pouvez le faire.

docker run...; docker exec -it $(docker ps -lq) bash

la commande docker ps -lq ne docker ps -lq que l'id du dernier conteneur (le l in -lq ) démarré. (cela suppose que vous ayez bash comme interpréteur disponible dans votre conteneur, vous pouvez avoir sh ou zsh ou tout autre)

Surveillance de l'utilisation des ressources

L'inspection de l'utilisation des ressources du système est un moyen efficace de trouver des applications qui fonctionnent mal. Cet exemple est équivalent à la commande top traditionnelle pour les conteneurs:

docker stats

Pour suivre les statistiques de conteneurs spécifiques, listez-les sur la ligne de commande:

docker stats 7786807d8084 7786807d8085

Docker stats affiche les informations suivantes:

CONTAINER     CPU %   MEM USAGE / LIMIT   MEM %    NET I/O               BLOCK I/O
7786807d8084  0.65%   1.33 GB / 3.95 GB   33.67%   142.2 MB / 57.79 MB   46.32 MB / 0 B

Par défaut, les docker stats affichent l'ID des conteneurs, ce qui n'est pas très utile, si vous préférez afficher les noms du conteneur, faites simplement

docker stats $(docker ps --format '{{.Names}}')

Surveillance des processus dans un conteneur

L'inspection de l'utilisation des ressources du système est un moyen efficace de réduire un problème sur une application en cours d'exécution. Cet exemple est un équivalent de la commande ps traditionnelle pour les conteneurs.

docker top 7786807d8084

Pour filtrer le format de la sortie, ajoutez des options ps sur la ligne de commande:

docker top 7786807d8084 faux

Ou, pour obtenir la liste des processus exécutés en tant que root, ce qui est une pratique potentiellement dangereuse:

docker top 7786807d8084 -u root

La commande docker top s'avère particulièrement utile lors du dépannage de conteneurs minimalistes sans shell ni commande ps .

Attacher à un conteneur en cours d'exécution

"Attachement à un conteneur" est l'acte de démarrer une session de terminal dans le contexte dans lequel le conteneur (et les programmes qu'il contient) est en cours d'exécution. Ceci est principalement utilisé à des fins de débogage, mais peut également être nécessaire si des données spécifiques doivent être transmises aux programmes exécutés dans le conteneur.

La commande attach est utilisée pour cela. Il a cette syntaxe:

docker attach <container>

<container> peut être soit l'identifiant du conteneur, soit le nom du conteneur. Par exemple:

docker attach c8a9cf1a1fa8

Ou:

docker attach graceful_hopper

Vous pouvez avoir besoin de sudo les commandes ci-dessus, selon votre utilisateur et comment docker est configuré.

Remarque: Attach ne permet qu'une seule session shell à joindre à un conteneur à la fois.

Attention: toutes les entrées au clavier seront transmises au conteneur. Frapper Ctrl-c va tuer votre conteneur.

Pour détacher d'un conteneur attaché, appuyez successivement sur Ctrl-p puis Ctrl-q

Pour attacher plusieurs sessions shell à un conteneur, ou simplement comme alternative, vous pouvez utiliser exec . En utilisant l'ID du conteneur:

docker exec -i -t c8a9cf1a1fa8 /bin/bash

En utilisant le nom du conteneur:

docker exec -i -t graceful_hopper /bin/bash

exec exécute un programme dans un conteneur, dans ce cas /bin/bash (un shell, probablement un conteneur). -i indique une session interactive, tandis que -t alloue un pseudo-TTY.

Remarque: contrairement à l' attachement , si vous appuyez sur Ctrl-c , la commande exec 'd ne se terminera que lorsque vous exécutez de manière interactive.

Impression des journaux

Suivre les journaux est le moyen le moins intrusif de déboguer une application en cours d'exécution. Cet exemple reproduit le comportement du tail -f some-application.log traditionnel sur le conteneur 7786807d8084 .

docker logs --follow --tail 10 7786807d8084

Cette commande affiche essentiellement la sortie standard du processus conteneur (le processus avec pid 1).

Si vos journaux n'incluent pas nativement l'horodatage, vous pouvez ajouter l'indicateur --timestamps .

Il est possible de regarder les journaux d'un conteneur arrêté, soit

  • démarrer le conteneur défaillant avec le docker run ... ; docker logs $(docker ps -lq)

  • trouver l'identifiant ou le nom du conteneur avec

docker ps -a

et alors

docker logs container-id ou

docker logs containername

comme il est possible de regarder les journaux d'un conteneur arrêté

Débogage du processus du conteneur Docker

Docker est juste un moyen sophistiqué d'exécuter un processus, pas une machine virtuelle. Par conséquent, le débogage d'un processus "dans un conteneur" est également possible "sur l'hôte" en examinant simplement le processus du conteneur en cours d'exécution en tant qu'utilisateur disposant des autorisations appropriées pour inspecter ces processus sur l'hôte (par exemple root). Par exemple, il est possible de répertorier tous les "processus de conteneur" sur l'hôte en exécutant un simple ps tant que root:

sudo ps aux

Tous les conteneurs Docker en cours d'exécution seront répertoriés dans la sortie.

Cela peut être utile lors du développement d'applications pour déboguer un processus exécuté dans un conteneur. En tant qu'utilisateur disposant des autorisations appropriées, des utilitaires de débogage classiques peuvent être utilisés sur le processus de conteneur, tels que strace, ltrace, gdb, etc.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow