docker主机pid模式不能在群集模式下工作
我想要一个container
与主机OS
共享PID
名称空间,并且在docker
findhost PID mode
。
PID
pid: "host"
将PID模式设置为主机PID模式。 这就打开了容器与主机操作系统之间的共享PID地址空间。 使用此标志启动的容器将能够访问和操作裸机的命名空间中的其他容器,反之亦然。
引用自https://docs.docker.com/compose/compose-file/#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环境是Docker 17.09.0-ce
, docker-compose 1.17.0
在Ubuntu16
。 为什么pid
模式不能在swarm
模式下工作?
最后,我在github上打开了一个问题,我得到了答案。
--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的更多信息,如果你有兴趣的话。