我希望container
与主机PID
共享OS
名称空间,并在host PID mode
中找到docker
。
PID
pid: "host"
将PID模式设置为主机PID模式。这打开了 在容器和主机操作系统之间共享PID 地址空间。使用此标志启动的容器将能够 访问和操纵裸机中的其他容器 命名空间,反之亦然。
它似乎适用于docker run
和docker-compose up
但swarm
模式,例如
$ 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
.....
.....
注意:在群集模式下部署堆栈时,将忽略此选项 a(版本3)撰写文件。
我的泊坞窗环境为Docker 17.09.0-ce
,docker-compose 1.17.0
位于Ubuntu16
。为什么pid
模式不能在swarm
模式下工作?
答案 0 :(得分:0)
最后,我在github上打开了一个问题,我得到了答案。
答案 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的其他信息。