我有一堆彼此非常相似的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
最终以所需的data
和src
挂载,但是扩展了它的两个服务仍然只有原始的data
安装。
注意:我加入了yaml
标签,因为我完全愿意使用一些YAML技巧来实现我要使用.dev
文件进行的操作。