如果我有(简化),则以下 docker-compose.yml :
parent:
image: parent
links:
- child
child:
image: child
我可以构建一个 docker-compose.override.yml 文件,不创建或启动child
图片吗?
一个不受欢迎的(对我而言)解决方案是反转文件,这样默认的yml文件只会创建parent
,而覆盖会创建两者。
但是,我希望 master 配置文件包含最常见的使用方案。
答案 0 :(得分:6)
为了保护原始海报:我完全明白你为什么要这样做。 docker-compose方式似乎总是“将你的变体放在覆盖文件中”, 但为了在大型开发团队中保持简单,我喜欢:
以下是我在覆盖文件中执行此操作的方法:
poolSize
结果是,所有容器都是由“docker-compose up”启动的,但那些我已经覆盖的容器会立即死掉。
如果您想要一个比阿尔卑斯山更轻的重量容器,请尝试tianon/true。
答案 1 :(得分:4)
对于 compose < 1.28,2021 年 1 月
如果您在覆盖文件中禁用多个服务(如 Ryan's answer 中),您可能会发现 Don't-Repeat-Yourself 使用 {{ 3}}, & yaml
锚(本质上是 yaml
中的“反向引用”)。
如:
# Your version
version: "2.4"
# `&anchor-name` defines the anchor (Here it is a map/dict)
# `*anchor-name` references the anchor
# `<<: *anchor-name` merges (`<<:`) the keys of `*anchor-name` with the current map
x-disabled-service: &disabled
image: "tianon/true"
command: "true"
entrypoint: "true"
services:
elasticsearch:
<<: *disabled
fluentdb:
<<: *disabled
这使用 extension fields 中建议的 tianon/true
作为一个非常小的图像。
结果在功能上与 Ryan 或 Ryan's comment 答案相同,但不那么冗长。
对于撰写版本 >= 1.28
此外,根据 Roman's 的 mcarson's answer to a similar SO question,存在一个新的撰写字段 profiles
,它允许您将可以使用命令行选项打开的容器组合在一起 {{ 1}}。
答案 2 :(得分:3)
运行撰写时,您不必启动每项服务,只需运行up
并传递要启动的服务名称即可。请参阅up
here的官方参考。
例如:docker-compose up -d parent
答案 3 :(得分:3)
我真的很喜欢Ryan的解决方案。但可以改进:
# disable services
fluentd:
image: hello-world
command: hello
restart: no
elasticsearch:
image: hello-world
command: hello
restart: no
我相信hello-world
是最小的映像(大小:〜1Kb),另一方面,alpine
linux的大小是〜6Mb