Alpine Linux 3.7上的Docker容器:奇怪的pid 1在容器的pid命名空间中不可见

我目前正在跟踪一个我们在Alpine Linux 3.7主机上使用dockerd 17.10.0-ce的奇怪问题。 对于这个主机上的所有容器来说,作为Docker镜像的入口点/命令启动的进程树在容器本身中是不可见的。 相比之下,在Ubuntu主机上,相同的映像将具有PID 1可见的进程树。

这是一个例子。

使用明确的已知入口点/命令运行一个容器:

 % docker run -d --name testcontainer --rm busybox /bin/sh -c 'sleep 1000000' 

确认dockerd正确显示进程:

 % docker top testcontainer PID USER TIME COMMAND 6729 root 0:00 /bin/sh -c sleep 1000000 6750 root 0:00 sleep 1000000 

现在,在该容器内启动一个shell并检查进程列表:

 % docker exec -t -i testcontainer /bin/sh / # ps -ef PID USER TIME COMMAND 6 root 0:00 /bin/sh 12 root 0:00 ps -ef 

可以观察到,我们的入口点命令(/ bin / sh -c'sleep 1000000')在容器内部是不可见的。 即使跑top也会得到相同的结果。

有什么我在这里失踪? 在具有相同docker引擎版本的Ubuntu主机上,结果如我所料。 这可能与Alpine的强化内核有关,导致容器PID空间如何分离的问题?

任何帮助赞赏的地区进行调查。

-b