- --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