← Назад к вопросам

Как увидеть хостовые процессы внутри Docker Container

2.0 Middle🔥 91 комментариев
#Docker и контейнеризация#Linux и администрирование

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Монтирование хостовой /proc в Docker контейнер

Чтобы увидеть процессы хостовой системы из внутри Docker контейнера, необходимо монтировать директорию /proc хоста внутрь контейнера. Контейнерная /proc по умолчанию отображает процессы, видимые внутри контейнера (обычно только процессы контейнера), а хостовые процессы находятся вне её видимости.

Основной метод: использование флага -v при запуске

docker run -it -v /proc:/host-proc ubuntu:latest

После запуска контейнера вы можете просматривать хостовые процессы через монтированную директорию /host-proc:

# Внутри контейнера:
cat /host-proc/1/status  # Просмотр информации о процессе init/systemd хоста
ls /host-proc            # Список PID хостовых процессов

Альтернативные подходы и безопасность

Монтирование всей /proc как /proc внутри контейнера (не рекомендуется из соображений безопасности):

docker run -it -v /proc:/proc ubuntu:latest

⚠️ Это потенциально опасно, поскольку контейнер получает прямой доступ к информации о всех процессах хоста, что может использоваться для атак.

Просмотр через инструменты хоста (без изменения контейнера):

# Использование docker top для просмотра процессов контейнера на хосте
docker top <container_name>

# Использование ps на хосте с фильтрацией по контейнерным процессам
ps aux | grep $(docker inspect <container_name> -f '{{.State.Pid}}')

Практический пример: скрипт для мониторинга хостовых процессов из контейнера

Создайте контейнер с монтированием /proc и используйте скрипт для анализа:

# Запуск контейнера с монтированием
docker run -d --name proc-viewer -v /proc:/external-proc alpine:latest tail -f /dev/null

# Скрипт внутри контейнера для просмотра топ-N процессов хоста по использованию памяти
docker exec proc-viewer sh -c '
echo "Хостовые процессы по памяти:"
for pid_dir in /external-proc/[0-9]*/; do
    if [ -f "$pid_dir/status" ]; then
        pid=$(basename "$pid_dir")
        name=$(grep "^Name:" "$pid_dir/status" | cut -d: -f2)
        mem=$(grep "^VmRSS:" "$pid_dir/status" | cut -d: -f2 | tr -d " kB")
        echo "$pid: $name - $mem kB"
    fi
done | sort -k3 -nr | head -10
'

Ключевые моменты безопасности и ограничения

  • Изоляция процессов — фундаментальная концепция Docker. Прямой доступ к хостовым /proc нарушает эту изоляцию.
  • Допустимые сценарии — мониторинг, дебаггинг и системное администрирование в доверенных окружениях.
  • Рекомендация — используйте отдельное монтирование в директорию с другим именем (например, /host-proc), чтобы избежать конфликтов с контейнерной /proc.
  • Альтернативы — для мониторинга лучше использовать API хоста (например, docker stats) или специализированные инструменты мониторинга (Prometheus, cAdvisor).

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

Как увидеть хостовые процессы внутри Docker Container | PrepBro