有没有办法禁用 docker-compose. yml 中的服务

我发现自己在这种情况下,我想禁用一个服务暂时在 docker-compose文件。

我当然可以把它注释掉,但是有没有选择只说“ enabled: false”呢?

91451 次浏览

您可以简单地重新定义 ABC0或 command,以便用什么也不做的东西(/bin/true)替换上述命令

这会使集装箱立即出口,什么都不做。


Shadi 在评论中添加了以下提示:

如果您根本不希望构建服务,那么重新定义构建键,使其指向一个 Dockerfile,该 Dockerfile只包含:

FROM tianon/true
ENTRYPOINT ["/true"]

5andr0 指出 在评论中顶层段 x-disabled:(类似于扩展字段)

更方便的方法是: 将禁用的服务移动到顶级部分 x-disabled:而不是 services:

带有 x-前缀的节将被解析,但是如果没有按照预期的方式作为扩展字段使用,则将忽略这些节。

无法禁用在 Docker 撰写 yaml 文件中定义的服务。 VonC 的建议是一个很好的解决方案 请参阅下面的 Docker 撰写文档,了解可用的选项 Https://docs.docker.com/compose/compose-file/

我添加了以下额外的行到我想暂时禁用的服务:

command: echo "{put your service name here} disabled"

无论如何都会开始,但是什么都没有。

我会将服务扩展到0个副本:

deploy:
replicas: 0

不幸的是,作为 文件说明这个 只对 Docker Swarm 有效

您可以在 docker-compose.override.yaml文件中执行此操作。

此文件由 docker-compose自动读取并合并到主 docker-compose.yaml中。

如果您将它排除在 Git 之外,那么每个开发人员都可以在不更改原始 docker-compose.yaml的情况下调整配置(带有一些限制)。

因此,可以通过在 docker-compose.override.yaml中重新定义其入口点来临时禁用服务 foo:

version: "3"


services:
foo:
entrypoint: ["echo", "Service foo disabled"]

原语,但是在服务的每一行的开头添加一个 #

我知道了:

docker-compose up $(yq -r '.services | keys | join(" ")' docker-compose.yml | sed 's/service-name//')

截至2021年1月,有一种方法可以优雅地禁用 docker-compose.yml中的某个服务,或者选择性地运行某些服务而不运行其他服务。Docker Compose 1.28.0引入了对 profiles密钥的支持。现在我们可以这样做:

version: "3.9"
services:
base_image:
...
profiles:
- donotstart

文档中的示例描述了如何使用此键创建基于命令行上的 --profile选项一起运行的容器组。点击这里查看页面: https://docs.docker.com/compose/profiles/

更新

对配置文件的支持在 编写 V2β5(docker compose)中正常工作。2021-07-08发布的 Docker 桌面3.5.2中包含了 ComposV2β6。

为配置文件分配服务

services:
dev_service:
...
profiles: ["dev"] # only runs with dev profile

启用配置文件

docker compose --profile dev up

档号: https://docs.docker.com/compose/profiles/