我想要一个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
.....
.....
注意:使用(版本3)Compose文件在群集模式下部署堆栈时,将忽略此选项。
我的码头环境是Docker 17.09.0-ce
,docker-compose 1.17.0
上的Ubuntu16
。为什么pid
模式不能在swarm
模式下工作?
最后,我在github上打开了一个问题,我得到了答案。
通过在群服务中使用--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的其他信息。