web-dev-qa-db-fra.com

Trouver des processus de conteneur Docker? (du point de vue de l'hôte)

Je fais des tests sur le docker et les conteneurs et je me demandais:

Existe-t-il une méthode que je peux utiliser pour rechercher tous les processus associés à un conteneur Docker par son nom ou son ID du point de vue de l'hôte.

Après tout, à la fin de la journée, un conteneur est un ensemble de processus virtualisés. 

24
Walid Ashraf

Vous pouvez utiliser la commande docker top . Cette commande répertorie tous les processus en cours d'exécution dans votre conteneur.

Par exemple, cette commande sur un conteneur de processus unique sur ma boîte de dialogue affiche:

UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                14097               13930               0                   23:17               pts/6               00:00:00            /bin/bash

Toutes les méthodes mentionnées par d’autres peuvent également être utilisées, mais celle-ci devrait être la plus simple.

Mettre à jour :

Pour obtenir simplement l'ID de processus principal dans le conteneur, utilisez cette commande:

 docker inspect -f '{{.State.Pid}}' <container id>
28
Boynux
  • D'abord, déterminez l'ID de processus du processus du démon docker.
  • Puis filtrez la liste des processus en gardant uniquement les processus dont l'ID de processus parent est celui du démon docker.
  • Enfin, filtrez les processus internes du moteur de menu fixe tels que docker-proxy.

# PID of the docker daemon
ps aux | grep -E 'docker (-d|daemon)'
root       665  0.0  0.4 1521560 17156 ?       Ssl  janv.06   5:47 /usr/bin/docker -d -H fd://
# find child processes of the docker daemon
pgrep -P 665

4076

4135

4210

4226

4784

4788

# figure out details of a process
ps 4076
 PID TTY      STAT   TIME COMMAND
 4076 ?        Ssl   10:45 /usr/bin/redis-server 0.0.0.0:6379
# repeat for other child processes
10
Thomasleveil

Un autre moyen d'obtenir une vue d'ensemble de tous les processus Docker s'exécutant sur un hôte consiste à utiliser des outils systemd génériques basés sur cgroup. 

systemd-cgls affichera tous nos groupes de contrôle et les processus qui les exécutent dans une arborescence, comme ceci:

├─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
├─docker
│ ├─070a034d27ed7a0ac0d336d72cc14671584cc05a4b6802b4c06d4051ce3213bd
│ │ └─14043 bash
│ ├─dd952fc28077af16a2a0a6a3231560f76f363359f061c797b5299ad8e2614245
│ │ └─3050 go-cron -s 0 0 * * * * -- automysqlbackup

Comme chaque conteneur Docker a son propre groupe de contrôle, vous pouvez également voir les conteneurs Docker et leurs processus hôtes correspondants de cette manière.

Deux propriétés intéressantes de cette méthode:

  1. Cela fonctionne même si les démons Docker sont obsolètes.
  2. C'est un aperçu assez rapide.

Vous pouvez également utiliser systemd-cgtop pour obtenir une vue d'ensemble de l'utilisation des ressources des conteneurs Docker, similaire à top.

Soit dit en passant: étant donné que les services systemd correspondent également à des groupes de contrôle, ces méthodes sont également applicables aux services systemd non dockérisés.

9
Johannes Gehrs

docker ps liste les conteneurs de menu fixe en cours d'exécution.

docker exec <id|name> ps vous indiquera les processus en cours d'exécution. 

2
Sobrique

Statistiques de Docker "ID conteneur" Affiche la consommation de ressources avec pid ou simplement ps Docker.

Cette feuille de triche peut probablement être utile . http://theearlybirdtechnology.com/2017/08/12/docker-cheatsheet/

0
Suma Ningaraju