docker host pid模式无法在swarm模式下工作

时间:2017-12-26 09:39:32

标签: docker docker-swarm

我希望container与主机PID共享OS名称空间,并在host PID mode中找到docker

  

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_nameswarm模式下工作)。

  

CONTAINER_NAME

     

.....

     

.....

     

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

我的泊坞窗环境为Docker 17.09.0-cedocker-compose 1.17.0位于Ubuntu16。为什么pid模式不能在swarm模式下工作?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

您可以在https://github.com/docker/swarmkit/issues/1605

上看到这一点

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

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

如果有--pid=host,您应该收到此警告:

  

忽略不支持的选项:pid

如果必须使用此功能,请坚持使用docker撰写。

如果您有兴趣,

https://www.aquasec.com/wiki/display/containers/Docker+Swarm+101有关于Docker Swarm的其他信息。