GNU/Linux >> Znalost Linux >  >> Linux

Jaké je PID v hostiteli procesu běžícího uvnitř kontejneru Docker?

Pokud znáte buď hostitelské pid nebo kontejnerové pid, můžete je najít prohledáním všech map NSpid na hostiteli takto:

# grep NSpid.*10061 /proc/*/status 2> /dev/null
/proc/1194200/status:NSpid: 1194200 10061
  • 1194200 je hostitelské pid
  • 10061 je kontejner pid

2>/dev/null je ignorovat krátkodobé procesy, které způsobují chyby grep, jako je tato:grep:/proc/1588467/status:Žádný takový soubor nebo adresář


Můžete se podívat na /proc/<pid>/status k určení mapování mezi PID jmenného prostoru a globálním PID. Pokud například v kontejneru dockeru spustím několik sleep 900 procesy, jako je tento:

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

Vidím, jak běží v kontejneru:

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

Můžu se na to podívat na hostiteli:

# 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

A pro kterýkoli z nich se mohu podívat na status soubor, abyste viděli jmenný prostor pid:

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

Při pohledu na NSpid řádek, vidím, že v rámci jmenného prostoru PID má tento proces pid 7. A skutečně, když zabiju proces 10394 na hostiteli:

# kill 10394

Pak v kontejneru vidím, že PID 7 již neběží:

/ # 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. Předat hostitelský port do kontejneru dockeru

  2. Jak zjistit, zda proces běží uvnitř lxc/Docker?

  3. Co je uvnitř obrázku/kontejneru Dockeru?

  1. Náhled technologie:Spuštění kontejneru uvnitř kontejneru

  2. Jaká je definice relace v linuxu?

  3. Proměnné prostředí běžícího procesu na Unixu?

  1. Jak spustit příkaz uvnitř spuštěného kontejneru Systemd?

  2. Jak zjistit ID procesu (pid) běžícího terminálového programu?

  3. Spuštěný docker na Ubuntu:připojený svazek hostitele nelze zapisovat z kontejneru