我已经在docker文档中找到了该问题的答案,但我认为它并没有被简单地放置在任何地方。我想使用docker-compose.yml
在docker中启动我的应用,我希望docker-compose.yml
可以启动另一个项目中另一个docker-compose.yml
文件中定义的其他容器。
version: '3.4'
#we need network if we want the services to talk to each other
networks:
services:
driver: bridge
services:
jc:
build:
context: .
dockerfile: ./Dockerfile
args:
- PORT=8080
network: host
networks:
- services
image: jc
container_name: jc
ports:
- 8080:8080
如何编辑此文件,以便在运行此docker-compose.yml
文件时可以在不同的文件路径中运行另一个docker-compose.yml
文件?
答案 0 :(得分:0)
这是一种黑客,但是您可以添加另一个容器,以启动docker compose和另一个docker-compose文件。 例如:
入门容器的Docker文件:
FROM ubuntu:bionic
RUN mkdir -p /compose
WORKDIR /compose
CMD ["docker-compose", "up", "-d"]
主要docker compose文件(启动Redis服务器和启动器容器)。请注意,撰写二进制文件,docker套接字和另一个docker-compose.yml文件已安装到启动程序容器中:
version: '2.1'
services:
from-main-compose:
image: redis:3
starter:
image: starter:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /usr/local/bin/docker-compose:/usr/local/bin/docker-compose:ro
- /home/shay/source/composeFromContainer/another-compose/docker-compose.yml:/compose/docker-compose.yml:ro
第二个docker撰写文件:
version: '2.1'
services:
redis-from-container:
image: redis:3
结果是这样的:
b1faa975df49 redis:3 "docker-entrypoint.s…" 5 minutes ago Up 5 minutes 6379/tcp compose_redis-from-container_1
7edca79d3d99 redis:3 "docker-entrypoint.s…" 5 minutes ago Up 5 minutes 6379/tcp composefromcontainer_from-main-compose_1
请注意,如果直接使用此hack,则服务将放置在不同的网络上,因此可能需要进行一些调整。
答案 1 :(得分:0)
尝试使用docker-compose文件的extends选项并使用了不同的用法后,我始终收到一条错误消息,指示即使更新到最新的docker版本也不支持扩展。但是,我确实通过运行此命令解决了问题。
docker-compose -f /path/to/other/docker-compose-file/docker-compose.yml up
我确定必须在docker-compose文件中添加一些内容,因此我在文档中忽略了这一点。但是您可以在此处了解更多信息。 docker-compose docs