Как переопределить сервис docker-compose, а затем расширить его? - PullRequest
0 голосов
/ 23 мая 2019

У меня есть несколько сервисов 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...