Что такое PID на хосте процесса, выполняющегося внутри контейнера Docker?

В Docker-контейнере выполняется несколько процессов, их PID изолированы в пространстве имен контейнера. Есть ли способ выяснить, каковы их PID на хосте Docker?

Например, внутри контейнера Docker работает веб-сервер Apache (я использую образ Apache + PHP изDocker Hub), и Apache при запуске создает больше рабочих процессов внутри контейнера. Эти рабочие процессы фактически обрабатывают входящие запросы. Для просмотра этих процессов я запускаюpstree внутри док-контейнера:

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

Родительский процесс Apache выполняется с PID 1 внутри пространства имен процесса контейнера. Однако с точки зрения хоста к нему также можно получить доступ, но его PID на хосте отличается и может быть определен запускомdocker compose команда:

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

Отсюда видно, что PID 1 из пространства имен процесса контейнера отображается в PID 17985 на хосте. Так что я могу бежатьpstree на хосте, чтобы перечислить дочерние элементы процесса Apache:

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

Исходя из этого, я предполагаю, что так же, как PID 1 в контейнере отображается на PID 17985 на хосте, он также отображает:

PID 8 в контейнере для PID 18010 на хосте, иPID 9 к PID 18011;PID 10 к PID 18012 и так далее ...

(Это позволяет мне отлаживать процессы из докер-контейнера, используя инструменты, которые доступны только на хосте, а не в контейнере, как strace)

Проблема в том, что я не знаю, насколько безопасно предполагать, что pstree перечисляет процессы в одном и том же порядке как в контейнере, так и в хосте.

Было бы здорово, если бы кто-то мог предложить более надежный способ определения того, что такое PID на хосте конкретного процесса, выполняющегося внутри контейнера Docker.

Ответы на вопрос(1)

Ваш ответ на вопрос