Docker run参考(4) – PID设置(–pid)

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

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

示例:容器内运行htop

创建这个Dockerfile:

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

构建Dockerfile并tag镜像为myhtop:

  1. $ docker build -t myhtop .

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

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

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

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

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

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

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

  1. $ docker run -it --pid=container:my-redis my_strace_docker_image bash
  2. $ strace -p 1
标签:Docker 发布于:2019-11-19 18:46:15