GNU/Linux >> Tutoriels Linux >  >> Linux

Quel est le PID dans l'hôte d'un processus exécuté dans un conteneur Docker ?

Si vous connaissez le pid de l'hôte ou le pid du conteneur, vous pouvez le trouver en recherchant toutes les cartes NSpid sur l'hôte comme suit :

# grep NSpid.*10061 /proc/*/status 2> /dev/null
/proc/1194200/status:NSpid: 1194200 10061
  • 1194200 est le pid de l'hôte
  • 10061 est le pid du conteneur

Le 2>/dev/null consiste à ignorer les processus de courte durée qui provoquent des erreurs de grep comme celle-ci :grep:/proc/1588467/status :No such file or directory


Vous pouvez regarder le /proc/<pid>/status fichier pour déterminer le mappage entre le PID de l'espace de noms et le PID global. Par exemple, si dans un conteneur docker je démarre plusieurs sleep 900 processus, comme ceci :

# docker run --rm -it alpine sh
/ # sleep 900 &
/ # sleep 900 &
/ # sleep 900 &

Je peux les voir s'exécuter dans le conteneur :

/ # ps -fe
PID   USER     TIME   COMMAND
    1 root       0:00 sh
    7 root       0:00 sleep 900
    8 root       0:00 sleep 900
    9 root       0:00 sleep 900
   10 root       0:00 ps -fe

Je peux les consulter sur l'hébergeur :

# ps -fe | grep sleep
root     10394 10366  0 09:11 pts/10   00:00:00 sleep 900
root     10397 10366  0 09:12 pts/10   00:00:00 sleep 900
root     10398 10366  0 09:12 pts/10   00:00:00 sleep 900

Et pour chacun d'entre eux, je peux regarder le status fichier pour voir le pid de l'espace de noms :

# grep -i pid /proc/10394/status
Pid:    10394
PPid:   10366
TracerPid:  0
NSpid:  10394   7

En regardant le NSpid ligne, je peux voir que dans l'espace de noms PID, ce processus a le pid 7. Et en effet, si je tue le processus 10394 sur l'hôte :

# kill 10394

Ensuite, dans le conteneur, je vois que le PID 7 ne fonctionne plus :

/ # ps -fe
PID   USER     TIME   COMMAND
    1 root       0:00 sh
    8 root       0:00 sleep 900
    9 root       0:00 sleep 900
   11 root       0:00 ps -fe

Linux
  1. Transférer le port hôte vers le conteneur Docker

  2. Comment déterminer si un processus s'exécute dans lxc/Docker ?

  3. Que contient une image/un conteneur Docker ?

  4. Quelle est la définition d'une session sous Linux?

  5. Rendre un montage NFS sur l'hôte visible et en lecture-écriture dans le conteneur Docker

Comment obtenir l'adresse IP d'un conteneur Docker à partir de l'hôte

Comment vérifier si le démon Docker ou un conteneur est en cours d'exécution

SIGTERM vs SIGKILL :Quelle est la différence ?

Démarrer un shell dans le conteneur Docker Alpine

Variables d'environnement d'un processus en cours d'exécution sous Unix ?

Comment spécifier le nom d'hôte pour le conteneur en cours d'exécution ?