您可以定义可选的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服务,使其仅在您明确请求时才会启动

也就是说:

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
      标志指定每个文件
  • 一个缺点是:需要为每个您希望可选的服务创建单独的组合文件
注意:如果是linux或
,则使用
分隔文件名如果是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项目命名的网络。下面是构建网络的方法。