docker主机pid模式不能在群集模式下工作

我想要一个container与主机OS共享PID名称空间,并且在dockerfindhost PID mode

PID

pid: "host"

将PID模式设置为主机PID模式。 这就打开了容器与主机操作系统之间的共享PID地址空间。 使用此标志启动的容器将能够访问和操作裸机的命名空间中的其他容器,反之亦然。

引用自https://docs.docker.com/compose/compose-file/#pid

例如,它似乎与docker rundocker-compose upswarm模式

 $ docker run ---detach --pid=host ubuntu:16.04 tail -f /dev/null $ docker exec -it container_name top # Return all processes within host OS namespace. 

 ##docker-compose.yml## version: '3.4' services: test: image: ubuntu:16.04 command: tail -f /dev/null pid: host 

 $ docker-compose -f docker-compose.yml up -d $ docker exec -it container_name top # Return all processes within host OS namespace. 

 # there is only one manager node in the swarm(no another worker). $ docker stack deploy -c docker-compose.yml test $ docker exec -it container_name top # Return only container process namespace. 

我知道一些选项不能用于swarm mode 。 然而,在这种情况下,据我所知,docker文档总是指定,例如, container_name选项(请参阅指定container_name将无法在swarm模式下工作)。

CONTAINER_NAME

…..

…..

注意:当使用(版本3)Compose文件在群集模式下部署堆栈时,将忽略此选项。

我的docker环境是Docker 17.09.0-cedocker-compose 1.17.0Ubuntu16 。 为什么pid模式不能在swarm模式下工作?

最后,我在github上打开了一个问题,我得到了答案。

https://github.com/docker/docker.github.io/issues/5624

--pid=host swarm中不支持在容器中使用主机的PID名称空间,通过在群集服务中使用--pid=host 。 仅供参考,将pid添加到不支持的选项列表中的补丁,以便打印警告。

你可以在https://github.com/docker/swarmkit/issues/1605上看到

因此,最新版本的docker swarm,如果你运行命令:

 $ docker stack deploy -c docker-compose.yml foobar 

--pid=host ,你应该得到这个警告:

忽略不支持的选项:pid

如果您必须使用此function,请使用Docker组合。

https://www.aquasec.com/wiki/display/containers/Docker+Swarm+101有关于Docker Swarm的更多信息,如果你有兴趣的话。