您可以定义可选的docker compose服务吗?
有没有一种方法可以定义Docker Compose服务,使其仅在您明确请求时才会启动 也就是说:您可以定义可选的docker compose服务吗?,docker,docker-compose,Docker,Docker Compose,有没有一种方法可以定义Docker Compose服务,使其仅在您明确请求时才会启动 也就是说: docker-compose up 不会启动它,但是 docker-compose up optional_service 将。实现这一点的一种方法是在不同的组合文件中定义可选服务。然后,要启动可选服务,请运行: $ docker-compose -f docker-compose.yml -f optional-service.yaml up 例如,如果我有一个docker-compose.
docker-compose up
不会启动它,但是
docker-compose up optional_service
将。实现这一点的一种方法是在不同的组合文件中定义可选服务。然后,要启动可选服务,请运行:
$ docker-compose -f docker-compose.yml -f optional-service.yaml up
例如,如果我有一个docker-compose.yml文件,它看起来像:
version: '2.1'
services:
lb:
image: nginx:1.13
db:
image: redis:3.2.9
version: '2.1'
services:
busy:
image: busybox
我可以使用一个可选的-service.yml扩展它,它看起来像:
version: '2.1'
services:
lb:
image: nginx:1.13
db:
image: redis:3.2.9
version: '2.1'
services:
busy:
image: busybox
请注意,两个撰写文件必须使用相同的撰写文件版本
您可以在Compose中阅读更多信息。版本
3.x
中已删除extend
关键字
我也面临同样的问题,我就是这么做的:
- 从Docker的官方文档中,我们可以在
文件中使用环境变量.env
- 其工作方式是:当您执行
时,它将读取docker compose up
,而不是读取docker compose.yml
变量中指定的所有合成文件compose\u FILE
COMPOSE_FILE=docker-compose.yml:./optional/docker-compose.prod.yml
- 好的方面是:
- 调用
时,docker compose up
文件自动读取(如果位于与.env
相同的级别)docker compose.yml
- 无需在CLI中使用
标志指定每个文件-f
- 调用
- 一个缺点是:需要为每个您希望可选的服务创建单独的组合文件
,则使用:
分隔文件名代码>如果是windows
Docker compose现在支持配置文件,允许您a)默认禁用一个或多个服务,b)在使用相应的--profile
参数运行Docker compose时启用它们
这是通过在docker compose.yml
文件中为您的服务添加profiles
键来实现的。没有此键的服务总是由docker compose(针对所有配置文件)启动
例如,使用以下docker-compose.yml文件
version: '3.9'
services
app_service:
# ...
test_service:
profiles:
- testing
# ...
运行docker compose up
只会启动app\u服务
,运行docker compose--profile testing up
将启动app\u服务
和test\u服务
可以通过传递多个--profile
标志来指定多个概要文件
更多信息可在此处找到:
编辑:我必须更新到docker engine v20.10.5才能工作。可能是的作业。相关:请求向docker Compose添加对此行为的明确支持:对我来说,您已经回答了自己的问题。docker compose up optional_service不起作用?问题是当您调用docker compose up
时,optional_service
也将启动。您是否能够链接这些服务?默认情况下,一个compose项目中的所有服务都添加到同一网络,而不需要彼此链接。运行docker compose up
,然后运行docker网络ls
。您将看到一个以正在添加的Compose项目命名的网络。下面是构建网络的方法。