如何将Docker宿主机进程传入容器供ps/htop查看
容器内查看宿主机全量进程的实现方案
完全可以实现,核心逻辑很简单:Linux 下 ps、htop 等进程查看工具,本质都是通过读取 /proc 虚拟文件系统下的内核暴露数据生成进程列表,只要容器内能访问到宿主机的 /proc 目录,就能直接拿到宿主机所有进程信息,不需要额外做进程数据同步。
方案1:启动容器时直接共享宿主机PID命名空间(最推荐,零额外配置)
Docker 原生提供了 PID 命名空间共享参数,启动容器时加上 --pid=host 即可,容器会直接复用宿主机的 PID 命名空间,内部默认挂载的 /proc 就是宿主机的 /proc,进程工具不需要任何适配就能直接用。
示例启动命令:
docker run -it --pid=host your-image-name bash
进入容器后安装好 procps(提供ps命令)、htop 工具,直接执行 ps aux 或者 htop,输出的就是宿主机的全量进程列表。
方案2:针对已经运行的、无法重启的容器
已经启动的容器不能直接修改 PID 命名空间配置,可以在宿主机用root权限手动把宿主机的 /proc 目录挂载到容器内的独立路径,再让进程工具读取该路径下的 proc 数据即可:
- 先在宿主机上执行以下命令,把宿主机
/proc绑定挂载到目标容器内的/host-proc目录,把命令里的YOUR_CONTAINER_NAME_OR_ID替换成你自己的容器名/ID:CONTAINER_PID=$(docker inspect -f '{{.State.Pid}}' YOUR_CONTAINER_NAME_OR_ID) nsenter -t $CONTAINER_PID -m mkdir -p /host-proc nsenter -t 1 -m -- mount --bind /proc /proc/$CONTAINER_PID/root/host-proc - 进入容器后,指定 proc 路径调用进程查看工具即可:
- 查看进程列表:
ps --pid /host-proc aux - 打开htop:
PROC_ROOT=/host-proc htop
- 查看进程列表:
注意事项
- 上述操作会打破容器默认的进程隔离边界,开启后容器内的高权限进程不仅能查看宿主机进程,还能对宿主机进程发送信号、调试,存在明确的权限风险,禁止给不可信的业务容器开放该配置。
- 运行中容器不要直接把宿主机
/proc覆盖容器自身原有/proc挂载点,会导致容器内进程状态识别异常,挂载到独立子目录是更安全的做法。
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

