Как увидеть процессы хоста изнутри Docker-контейнера?

«Как увидеть процессы хоста изнутри Docker-контейнера?» — вопрос из категории Docker, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Это требуется для диагностики, когда нужно понять, как контейнер взаимодействует с хостовой системой. Есть два основных метода:

1. Запуск контейнера с пространством PID хоста (--pid=host). Это самый прямой способ. Контейнер видит все процессы системы так, как если бы он был запущен прямо на хосте.

docker run --rm --pid=host alpine ps aux

Важно: Это серьезное ослабление изоляции. Используйте только для отладки в контролируемых средах, никогда в продакшене без крайней необходимости.

2. Монтирование хостовой директории /proc в контейнер. Директория /proc в Linux — виртуальная файловая система, содержащая информацию о процессах. Смонтировав ее, контейнер может читать данные о хостовых процессах.

docker run --rm -v /proc:/host/proc:ro alpine ps -ef --pid 1
# Флаг :ro (read-only) важен для безопасности

Практический пример из опыта: При диагностике утечки памяти на хосте, которая, как подозревали, могла быть связана с Docker, я использовал команду внутри временного контейнера с --pid=host, чтобы сравнить вывод top или htop с хостовым и точно определить, принадлежат ли "прожорливые" процессы контейнерам или другому ПО на сервере.