如何覆盖docker-compose服务,然后对其进行扩展?

时间:2019-05-22 22:55:03

标签: docker-compose yaml

我有一堆彼此非常相似的docker-compose服务,唯一的区别是运行的command

这是基本服务定义的最低版本:

# docker-compose.yaml
version: '2.4'    # version 3 doesn't support extending services

services:
  base:
    build:
      context: .
    volumes:
      - ./data:/data

一些示例扩展服务:

# docker-compose.services.yaml

version: '2.4'    # version 3 doesn't support extending services
services:
  foo:
    extends: {service: base}
    command: cat /src/foo
  bar:
    extends: {service: base}
    command: cat /data/bar

我可以将这些配置与docker-compose -f docker-compose.yaml -f docker-compose.services.yaml config合并,看起来很棒。

根据情况,我想在所有服务中安装其他卷。 (一个特殊的用例是在开发过程中,因此我可以修改Python源代码,而不必重新{docker-compose build花费很长的时间来完成所有工作。)撰写文件:

# docker-compose.dev.yaml

version: '2.4'    # version 3 doesn't support extending services
services:
  base:
    volumes:
        - ./src:/src

但是,尝试将所有组合文件合并在一起不会产生预期的结果:

$ docker-compose -f docker-compose.yaml -f docker-compose.dev.yaml -f docker-compose.dev.yaml config

产生

services:
  bar:
    build:
      context: /home/nicu/codes/docker-compose-extend-volumes
    command: cat /data/bar
    volumes:
    - /home/nicu/codes/docker-compose-extend-volumes/data:/data:rw
  base:
    build:
      context: /home/nicu/codes/docker-compose-extend-volumes
    volumes:
    - /home/nicu/codes/docker-compose-extend-volumes/data:/data:rw
    - /home/nicu/codes/docker-compose-extend-volumes/src:/src:rw
  foo:
    build:
      context: /home/nicu/codes/docker-compose-extend-volumes
    command: cat /src/foo
    volumes:
    - /home/nicu/codes/docker-compose-extend-volumes/data:/data:rw
version: '2.4'

因此,尽管volumes服务的base最终以所需的datasrc挂载,但是扩展了它的两个服务仍然只有原始的data安装。

注意:我加入了yaml标签,因为我完全愿意使用一些YAML技巧来实现我要使用.dev文件进行的操作。

0 个答案:

没有答案