我知道通过添加这个卷来共享docker socket /var/run/docker.sock:/var/run/docker.sock
的建议,将其添加到docker-compose文件中。在你的CI或测试环境中使用Docker-in-Docker?
我创建了这个简单的例子experiment设置,以使在docker-compose容器中启动docker-compose成为可能,而不需要共享一切。
docker-compose.yml
services:
manager:
build:
context: ./manager
privileged: true
ngnix:
image: nginx:latest
经理人Dockerfile
FROM nginx:latest
RUN apt-get -y update \
&& apt-get install -y iputils-ping docker-compose
RUN mkdir /app
WORKDIR /app
COPY . ./
ENTRYPOINT ["/app/entrypoint.sh"]
CMD ["ping", "www.google.com"]
managerdocker-compose.yml
#!/bin/sh
set -e
service docker start
exec "$@"
managerdocker-compose.yml.
services:
foobar:
image: ruby:latest
现在可能的命令是。docker-compose up -d; docker-compose exec manager docker-compose run foobar /bin/bash
目前,我还没办法在主机和管理器之间共享docker -compose网络。当然,这就是docker按照设计的工作方式。因此在执行上面的命令后,执行 ping ngnix
来自 foobar
容器将无法工作。
我的问题是。 我怎么才能让它工作?
我试着添加 network: host
到managerdocker-compose.yml中,用了不同的方法,但是没有成功,或者说我太笨了,没有做到正确。
正如David Maze所指出的,可能唯一的解决方案就是共享socket。更多阅读信息在这里。