Linux入门教程:Docker run参考(4) – PID设置(–pid), PID命名空间提供


--pid=""  : Set the PID (Process) Namespace mode for the container,              'container:<name|id>': joins another container's PID namespace              'host': use the host's PID namespace inside the container

默认下,所有的容器都启用了PID命名空间。
PID命名空间提供了进程的分离。PID命名空间删除系统进程视图,允许进程ID可重用,包括pid 1。
在一些情况下需要容器共享主机进程命名空间,基本上允许容器内的进程可以查看主机的所有进程。例如,构建了一个带调试工具如strace或gdb的容器,想在容器使用这些工具来调试主机的进程。

示例:容器内运行htop

创建这个Dockerfile:

FROM alpine:latest RUN apk add --update htop && rm -rf /var/cache/apk/* CMD ["htop"]

构建Dockerfile并tag镜像为myhtop:

$ docker build -t myhtop .

使用如下命令在容器内运行htop命令:

$ docker run -it --rm --pid=host myhtop

这样htop就能看到宿主机上的所有进程。

示例:加入其它容器pid命令空间

启动一个容器运行redis服务器:

$ docker run --name my-redis -d redis

通过运行一个带strace的容器来debug这个redis容器:

$ docker run -it --pid=container:my-redis my_strace_docker_image bash $ strace -p 1

相关内容