У меня есть несколько сервисов 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
все, что, к сожалению, занимает long .) Я попытался сделать это, имея дополнительный файл compose:
# 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
.
Примечание: Iвключил тег yaml
, потому что я полностью открыт для использования некоторых хитростей YAML для достижения того, что я пытаюсь сделать с файлом .dev
.