需共享宿主机pid空间因默认隔离使容器无法查看宿主机进程,--pid=host可让容器内ps aux等命令直接看到宿主机全部进程(pid一致),适用于调试、监控等场景,但存在安全风险需慎用。

用 --pid=host 参数启动容器,就能让它与宿主机共享进程命名空间。
为什么需要共享宿主机 PID 空间
默认情况下,Docker 容器运行在独立的 PID 命名空间中,看不到宿主机上的任何进程(比如 systemd、sshd、其他容器等)。当你需要在容器内直接观察或管理这些进程时,就必须打破这层隔离。
典型场景包括:
- 在调试容器中运行
ps aux或top查看宿主机整体负载 - 使用
strace或gdb跟踪宿主机上某个服务进程 - 监控工具容器采集宿主机级指标(如 Prometheus node_exporter)
- 执行需访问全局进程树的操作,例如查找并 kill 某个跨容器/宿主机的服务实例
正确使用 --pid=host
启动容器时显式加上该参数即可:
docker run -it --pid=host ubuntu:22.04 ps aux | head -10
注意几点:
- 该参数不可在容器运行后动态添加,必须在
docker run时指定 - 容器内看到的 PID 与宿主机完全一致(PID 1 就是宿主机的 init 进程)
- 不改变其他命名空间(网络、IPC、挂载等仍保持默认隔离)
- 容器内新建的进程也会出现在宿主机的
ps结果中
安全提醒
--pid=host 是高权限配置,意味着容器内任意进程都能看到并可能向宿主机所有进程发送信号(如 kill -9)。生产环境慎用,尤其避免在不受信镜像或用户可控容器中启用。若只需监控,优先考虑更安全的替代方案,例如通过宿主机暴露 /proc 只读挂载或使用专门授权的监控 agent。











