是否可以将docker-compose文件“导入”或链接到另一个docker-compose文件?
假设我有两个文件:
# docker-compose-1.yml
services:
A:
# config
B:
# config
# docker-compose-2.yml
services:
C:
# config
import: docker-compose-1.yml
通过运行docker-compose -f docker-compose-2.yml up
,我想启动容器A,B(在导入的文件中指定)和C。是否可以这样做,而不必用-f
参数链接两个文件? / p>
答案 0 :(得分:1)
通过扩展
可以扩展或使用多个docker-compose文件及其服务,并将它们链接到一个文件中。您可以查看this link来了解多个撰写文件的其他用法。但是,如前所述,如果没有链接相关的文件,您将无法包含该文件。
在这里,我定义了common-services.yaml:
version: '2'
services:
nginx_a:
image: nginx:latest
container_name: nginx
ports:
- 81:80
- 1443:443
然后我创建了一个docker-compose.yml,并包含common-services.yml文件及其自身的服务。
services:
nginx:
extends:
file: common-services.yml
service: nginx_a
nginx_b:
image: nginx:latest
container_name: nginx_b
volumes:
ports:
- 82:80
- 2443:443
通过.env技术
如果要避免链接使用多个文件,还可以使用a technique和.env文件。我将使用.env技术重写前面的示例。
COMPOSE_PATH_SEPARATOR=:
COMPOSE_FILE=common-services.yml:docker-compose.yml
让我们在common-services.yml中添加另一个服务作为示例
version: '2'
services:
ngin_a:
image: nginx:latest
container_name: nginx_a
ports:
- 81:80
- 1443:443
redis_c:
image: redis:latest
container_name: redis_c
ports:
- 6381:6380
最后,将它们全部加载到docker-compose文件中,而不会在这些服务中提及事件。
version: '2'
services:
nginx_b:
image: nginx:latest
container_name: nginx_b
ports:
- 82:80
- 2443:443
env_file:
- .env
最后,您将获得三个正在运行的服务。