GNU/Linux >> Linux Esercitazione >  >> Linux

Qual è il PID nell'host, di un processo in esecuzione all'interno di un contenitore Docker?

Se conosci il pid dell'host o il pid del contenitore, puoi trovarlo cercando tutte le mappe NSpid sull'host in questo modo:

# grep NSpid.*10061 /proc/*/status 2> /dev/null
/proc/1194200/status:NSpid: 1194200 10061
  • 1194200 è il pid host
  • 10061 è il pid del contenitore

Il 2>/dev/null serve a ignorare i processi di breve durata che causano errori grep come questo:grep:/proc/1588467/status:Nessun file o directory simile


Puoi guardare il /proc/<pid>/status file per determinare la mappatura tra il PID dello spazio dei nomi e il PID globale. Ad esempio, se in un contenitore docker avvio diversi sleep 900 processi, come questo:

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

Posso vederli in esecuzione nel contenitore:

/ # 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

Posso guardare questi sull'host:

# 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

E per ognuno di questi, posso guardare il status file per vedere lo spazio dei nomi pid:

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

Guardando il NSpid linea, posso vedere che all'interno dello spazio dei nomi PID questo processo ha pid 7. E in effetti, se interrompo il processo 10394 sull'host:

# kill 10394

Quindi nel contenitore vedo che PID 7 non è più in esecuzione:

/ # 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. Come determinare se un processo viene eseguito all'interno di lxc/Docker?

  2. Cosa c'è all'interno di un'immagine/contenitore Docker?

  3. Qual è la definizione di una sessione in Linux?

  4. Rendere visibile un montaggio NFS sull'host e leggere-scrivere all'interno del contenitore Docker

  5. Come specificare il nome host per il contenitore in esecuzione?

Costruire contenitori a mano:lo spazio dei nomi PID

Come eseguire un comando all'interno di un contenitore Systemd in esecuzione?

Come trovare l'ID di processo (pid) di un programma terminale in esecuzione?

Come ottenere l'indirizzo IP di un contenitore Docker dall'host

Come verificare se il demone Docker o un container è in esecuzione

SIGTERM vs SIGKILL:qual è la differenza?