Istnieje kilka procesów uruchomionych w kontenerze Docker, ich PIDs są izolowane w przestrzeni nazw kontenerów, czy istnieje sposób, aby dowiedzieć się, jakie są ich PIDy na hoście Docker?Co to jest PID w hoście, procesu działającego w kontenerze Docker?
Na przykład serwer WWW Apache działa wewnątrz kontenera Docker, (używam Apache + obraz PHP z Docker Hub), a Apache, gdy się uruchamia, tworzy więcej procesów roboczych wewnątrz kontenera. Te procesy robocze faktycznie obsługują przychodzące żądania. Aby zobaczyć te procesy biegnę pstree
wewnątrz pojemnika Döcker:
# pstree -p 1
apache2(1)-+-apache2(8)
|-apache2(9)
|-apache2(10)
|-apache2(11)
|-apache2(12)
`-apache2(20)
Rodzic proces Apache zjazdy na PID 1 wewnątrz przestrzeni nazw procesów pojemnik. Jednak z punktu widzenia gospodarza można również uzyskać, ale jego PID na hoście jest inny i może być określona przez uruchomiony docker compose
polecenie:
$ docker inspect --format '{{.State.Pid}}' container
17985
Z tego widzimy, że PID 1 od wewnątrz procesu pojemnika mapy przestrzeni nazw do PID 17985 na hoście. Więc mogę uruchomić pstree
na hoście, notować dzieci procesu Apache:
$ pstree -p 17985
apache2(17985)─┬─apache2(18010)
├─apache2(18011)
├─apache2(18012)
├─apache2(18013)
├─apache2(18014)
└─apache2(18164)
Od tego zakładam, że w taki sam sposób jak PID 1 w mapach kontenerowych do PID 17985 na hoście, ale również mapy :
- PID 8 w zbiorniku do Pid 18010 na gospodarza, a
- PID 9 do PID 18011;
- PID 10 do PID 18012 i tak dalej ...
(To pozwala mi debugować procesy z pojemnika Döcker, przy użyciu narzędzi, które są dostępne wyłącznie tylko na komputerze, a nie w pojemniku , jak strace)
Problem polega na tym, że nie wiem, jak bezpiecznie założyć, że pstree wymienia procesy w tej samej kolejności zarówno w kontenerze, jak i na hoście.
Byłoby świetnie, gdyby ktoś mógł zaproponować bardziej niezawodny sposób na wykrycie, co jest PID na hoście określonego procesu działającego w kontenerze Docker.
PID może również oznaczać OS wątki, przynajmniej na linux. Możesz sprawdzić w java (lub innym języku), tworząc wiele wątków i licząc PIDS, które otrzymujesz. – ieugen