【问题标题】:Can you define optional docker-compose services?你能定义可选的 docker-compose 服务吗?
【发布时间】:2018-01-22 16:08:14
【问题描述】:

有没有办法定义一个 Docker Compose 服务,以便它只在您明确请求时才被带到up

也就是说:

docker-compose up

不会启动它,但是

docker-compose up optional_service

会的。

【问题讨论】:

  • 可能是extends 的工作。
  • 相关:向 Docker Compose 添加对此行为的显式支持的请求:github.com/docker/compose/issues/1896
  • 对我来说,您已经回答了自己的问题。 docker-compose up optional_service 不起作用?
  • 问题是optional_service也会在你调用docker-compose up时启动

标签: docker docker-compose


【解决方案1】:

实现此目的的一种方法是在不同的撰写文件中定义您的可选服务。然后启动可选服务,运行:

$ 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 documentation 中阅读更多相关信息。

【讨论】:

  • 你能链接这些服务吗?
  • 默认情况下,Compose 项目中的所有服务都添加到同一个网络中,无需相互链接。运行docker-compose up,后跟docker network ls。您将看到一个以您的 Compose 项目命名的网络。这是撰写网络的link
  • 将命令更新为docker-compose -f docker-compose.yml -f optional-service.yml up !
【解决方案2】:

Docker compose 现在支持配置文件,它允许您 a) 默认禁用一个或多个服务,b) 在运行 docker compose 时使用相应的 --profile 参数启用它们。

这是通过在docker-compose.yml 文件中向您的服务添加一个profiles 密钥来完成的。没有此密钥的服务始终由 docker-compose 启动(适用于所有配置文件)。

例如,使用以下 docker-compose.yml 文件

version: '3.9'
services
  app_service:
    # ...
  test_service:
    profiles:
      - testing
    # ...

运行docker-compose up 只会启动app_service,运行docker-compose --profile testing up 会同时启动app_servicetest_service

可以通过传递多个--profile 标志来指定多个配置文件。

更多信息可以在这里找到:https://docs.docker.com/compose/profiles/

编辑:我必须更新到 docker engine v20.10.5 才能工作。

【讨论】:

    【解决方案3】:

    extend 关键字已在版本 3.x 中删除。

    我遇到了同样的问题,这就是我所做的:

    • 从 Docker 的官方文档中,我们可以在 .env 文件中使用 COMPOSE_FILE 环境变量。
    • 其工作方式是:当您执行docker-compose up 时,它不会读取docker-compose.yml,而是读取COMPOSE_FILE 变量中指定的所有撰写文件。

    例如,

    COMPOSE_FILE=docker-compose.yml:./optional/docker-compose.prod.yml
    
    • 好的部分是:
      • 当我们调用 docker-compose up 时,.env 文件是自动读取的(如果位于与 docker-compose.yml 相同的级别)。
      • 无需在 CLI 中使用 -f 标志指定每个文件。
    • 一个缺点是:需要为您希望使其成为可选的每个服务创建单独的撰写文件。

    注意:对于 linux,使用 : 分隔文件名,对于 windows,使用 ; 分隔文件名。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-19
      • 2016-11-21
      • 2016-08-12
      相关资源
      最近更新 更多