配置docker-compose覆盖以忽略/隐藏某些容器

时间:2016-05-09 15:56:06

标签: docker docker-compose

如果我有(简化),则以下 docker-compose.yml

parent:
  image: parent
  links:
    - child

child:
  image: child

我可以构建一个 docker-compose.override.yml 文件,创建或启动child图片吗?

一个不受欢迎的(对我而言)解决方案是反转文件,这样默认的yml文件只会创建parent,而覆盖会创建两者。

但是,我希望 master 配置文件包含最常见的使用方案。

4 个答案:

答案 0 :(得分:6)

为了保护原始海报:我完全明白你为什么要这样做。 docker-compose方式似乎总是“将你的变体放在覆盖文件中”, 但为了在大型开发团队中保持简单,我喜欢:

  • 使用一个命令启动所有内容的能力(例如“docker-compose up”或“docker-compose up main”)
  • 我所有的泊坞窗定义都在一个地方
    • 覆盖文件中唯一的变体是禁用哪些容器

以下是我在覆盖文件中执行此操作的方法:

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'smcarson's answer to a similar SO question,存在一个新的撰写字段 profiles,它允许您将可以使用命令行选项打开的容器组合在一起 {{ 1}}。

compose 1.28, January 2021

答案 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