Как при желании запустить docker-compose зависимый контейнер? - PullRequest
0 голосов
/ 08 января 2019

У меня есть проект docker-compose, который (упрощенно) выглядит следующим образом:

version: '3'
services:
  main:
    image: main-image
    depends_on:
      - my_service
  my_service:
    image: very-big-image

Функциональность, предоставляемая my-service, также доступна в облаке. Локальный запуск выполняется быстрее, но требует значительных ресурсов процессора и диска. Поэтому иногда мне нужно запускать только main, а иногда - оба контейнера.

Я не хочу дублировать код docker-compose; полные определения контейнера намного сложнее, чем приведенная выше упрощенная версия.

Я подумал, что мог бы поместить каждую службу в отдельный файл .yml, а затем сделать docker-compose -f main.yml -f my_service.yml up, но в строке depends-on произойдет сбой, что, по-видимому, требует зависимости в том же файле.

Пока у меня есть ужасное решение. Я делю на две части (со вторыми файлами, начинающимися со строки depends_on. Затем я использую сценарий оболочки, который знает, какую конфигурацию я хочу запустить, и либо запускает первый файл, либо объединяет два файла вместе. Думаю, это работает ; но некрасиво.

Как правильно это сделать?

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Как правильно это сделать?

Я думаю, что вы уже определили это: разделите определения службы между двумя файлами, чтобы иногда вы могли запускать оба:

docker-compose -f main.yml -f service.yml up

И иногда вы можете запустить только сервисный контейнер:

docker-compose -f service.yml up

Это прекрасно работает, и клавиша depends_on не требует, чтобы все определения были в одном файле. Словари объединяются до того, как docker-compose пытается разрешить зависимости.

Например, если у меня есть в main.yml:

---
version: "3"
services:
  main:
    image: alpine
    command: sleep 30
    depends_on:
      - service

А в service.yml:

---
version: "3"
services:
  service:
    image: alpine
    command: sleep 30

Я могу запустить только контейнер service следующим образом:

$ docker-compose -f service.yml up
Starting compose_service_1 ... done
Attaching to compose_service_1

Или я могу запустить оба контейнера: main и service:

$ docker-compose -f main.yml -f service.yml up
Starting compose_service_1 ... done
Starting compose_main_1    ... done
Attaching to compose_service_1, compose_main_1

Если вы видите поведение, которое, по-видимому, противоречит этому, было бы полезно, если бы вы обновили свой вопрос с минимальными примерами, воспроизводящими проблему, и включили бы любой вывод ошибки при выполнении docker-compose.

0 голосов
/ 08 января 2019

Попробуйте это:

docker-compose start <container_name>

Эта команда запускает только выбранный контейнер.

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