有没有一种方法可以定义一个Docker Compose服务,以便只有在显式请求时才会启动它?
也就是说:
docker-compose up
不会启动它,但是
docker-compose up optional_service
有没有一种方法可以定义一个Docker Compose服务,以便只有在显式请求时才会启动它?
也就是说:
docker-compose up
不会启动它,但是
docker-compose up optional_service
Docker compose 现在支持配置文件profiles,它允许您 a) 默认禁用一个或多个服务,以及b) 当使用相应的 --profile
参数运行docker-compose时启用它们。
通过在 docker-compose.yml
文件中的服务上添加 profiles
关键字来实现此功能。没有此关键字的服务始终由docker-compose启动(对于所有profiles)。
例如,使用以下docker-compose.yml文件
version: '3.9'
services
app_service:
# ...
test_service:
profiles:
- testing
# ...
运行 docker-compose up
只会启动 app_service
,而运行 docker-compose --profile testing up
会同时启动 app_service
和 test_service
。
可以通过传递多个 --profile
标记来指定多个配置文件。
更多信息请参见:https://docs.docker.com/compose/profiles/
编辑:我必须升级到 Docker 引擎 v20.10.5 才能使用此功能。
实现这一点的一种方法是在不同的Compose文件中定义您的可选服务。然后启动可选服务,运行:
$ 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
我可以使用一个类似以下文件的 optional-service.yml 来扩展它:
version: '2.1'
services:
busy:
image: busybox
请注意,两个Compose文件必须使用相同的Compose文件版本。
您可以在Compose 文档中了解更多信息。
docker-compose up
命令,然后执行 docker network ls
命令,您将看到一个以 Compose 项目名称命名的网络被添加。这是 Compose 网络的链接。 - ivan.simdocker-compose -f docker-compose.yml -f optional-service.yml up
! - Horrible Programmerextend
关键字在版本 3.x
中已被移除。
我曾经遇到了同样的问题,这是我的解决方法:
.env
文件中使用一个名为 COMPOSE_FILE
的环境变量。docker-compose up
命令时,它将不再读取 docker-compose.yml
文件,而是读取所有在 COMPOSE_FILE
变量中指定的 compose 文件。例如:
COMPOSE_FILE=docker-compose.yml:./optional/docker-compose.prod.yml
.env
文件与docker-compose.yml
在同一级别下,那么在调用docker-compose up
时,该文件会被自动读取。-f
标志指定每个文件。注意:在Linux中使用
:
分隔文件名,在Windows中使用;
分隔文件名。
extends
。 - Oliver Charlesworthdocker-compose up
时,optional_service
也将启动。 - Dancrumb