Was ist die PID im Host eines Prozesses, der in einem Docker-Container ausgeführt wird?

In einem Docker-Container werden mehrere Prozesse ausgeführt. Ihre PIDs sind im Containernamensraum isoliert. Gibt es eine Möglichkeit, herauszufinden, wie ihre PIDs auf dem Docker-Host lauten?

Zum Beispiel gibt es einen Apache-Webserver in einem Docker-Container (ich verwende Apache + PHP-Image vonDocker Hub), und der Apache erstellt beim Start mehr Arbeitsprozesse im Container. Diese Worker-Prozesse verarbeiten tatsächlich eingehende Anforderungen. Um diese Prozesse anzuzeigen, führe ich @ aupstree im Docker-Container:

# pstree -p 1
apache2(1)-+-apache2(8)
           |-apache2(9)
           |-apache2(10)
           |-apache2(11)
           |-apache2(12)
           `-apache2(20)

Der übergeordnete Apache-Prozess wird auf PID 1 im Containerprozess-Namespace ausgeführt. Aus Sicht des Hosts kann jedoch auch darauf zugegriffen werden, aber die PID auf dem Host ist unterschiedlich und kann durch Ausführen von @ bestimmt werdedocker compose Befehl

 $ docker inspect --format '{{.State.Pid}}' container
 17985

Hieraus können wir ersehen, dass die PID 1 im Containerprozess-Namespace der PID 17985 auf dem Host zugeordnet ist. So kann ich @ laufpstree auf dem Host, um die untergeordneten Elemente des Apache-Prozesses aufzulisten:

$ pstree -p 17985
apache2(17985)─┬─apache2(18010)
               ├─apache2(18011)
               ├─apache2(18012)
               ├─apache2(18013)
               ├─apache2(18014)
               └─apache2(18164)

Aus diesem Grund gehe ich davon aus, dass PID 1 im Container auf dieselbe Weise wie PID 17985 auf dem Host zugeordnet wird:

PID 8 im Container zu PID 18010 auf dem Host undPID 9 bis PID 18011; PID 10 bis PID 18012 und so weiter ...

(Dadurch kann ich die Prozesse im Docker-Container mit Tools debuggen, die nur auf dem Host und nicht im Container verfügbar sind, z. B. strace.)

Das Problem ist, dass ich nicht weiß, wie sicher es ist anzunehmen, dass pstree die Prozesse sowohl im Container als auch im Host in derselben Reihenfolge auflistet.

Wäre großartig, wenn jemand eine zuverlässigere Methode vorschlagen könnte, um zu ermitteln, was eine PID auf dem Host eines bestimmten Prozesses ist, der im Docker-Container ausgeführt wird.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage