コンテナのPID namespaceの共有

docker runコマンドの--pidオプションで使用するPID namespaceを指定できる。

このオプションに与える引数は以下の2パターン

  • container:CONTINAER_ID
  • host

container:XXXを指定すれば、他のコンテナとPID namespaceを共有できる。

$ docker container run -d --rm --name app1 -it busybox sh -c 'sleep 1d'
1b0d92a2f8aa2a5b3b858aece1f1ba04b532818118b9f73e841702f26539ed5c
$ docker container run -d --rm --name app2 --pid=container:app1 -it busybox sh -c 'sleep 2d'
df31e34fa1c6a72c65985c5b05654585410230c4f5b8422a4b96a10c0acc831a
$ docker container exec -it app2 /bin/sh
/ # ps
PID   USER     TIME  COMMAND
    1 root      0:00 sh -c sleep 1d
    7 root      0:00 sh -c sleep 2d
   13 root      0:00 /bin/sh
   19 root      0:00 ps

hostを指定すればホストとPID namespaceを共有できる。

$ docker container run -d --rm --name app3 --pid=host -it busybox sh -c 'sleep 2d'
04e81362a779c10449e4967511de0115747f3f8cfb40e0a4ccb0b05983af9444
$ docker container exec -it app3 /bin/sh

/ # ps
PID   USER     TIME  COMMAND
    1 root      0:00 /init
(omitted...)
23907 root      0:00 /usr/bin/containerd-shim-runc-v2 -namespace moby -id 1b0d92a2f8aa2a5b3b858aece1f1ba04b532818118b9f73e841702f26539ed5c -address /run/containerd/containerd.sock
23927 root      0:00 sh -c sleep 1d
24003 root      0:00 /usr/bin/containerd-shim-runc-v2 -namespace moby -id df31e34fa1c6a72c65985c5b05654585410230c4f5b8422a4b96a10c0acc831a -address /run/containerd/containerd.sock
24020 root      0:00 sh -c sleep 2d
24370 root      0:00 /usr/bin/containerd-shim-runc-v2 -namespace moby -id 04e81362a779c10449e4967511de0115747f3f8cfb40e0a4ccb0b05983af9444 -address /run/containerd/containerd.sock
24389 root      0:00 sh -c sleep 2d
24519 root      0:00 /bin/sh
24576 root      0:00 ps