docker-compose вставить дополнительную команду при создании контейнера - PullRequest
0 голосов
/ 30 сентября 2018

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

Поскольку я не уверен, что это возможно, для меня также приемлемозапускать команды вручную перед вызовом docker-compose up.

Учитывая следующую docker-compose.yml версию: '2.3'

version: '2.3'

services:

  serv1:
    image: my_image
    command: some startup command

  serv2:
    image: my_image
    command: some startup command 2

Я попытался запустить следующую

$ docker-compose run serv1 my_creation_command
$ docker-compose run serv2 my_creation_command
$ docker-compose up

Но это приводит к тому, что первые две команды создают контейнеры projectname_serv1_run_1 и projectname_serv2_run_1, а третья команда создает projectname_serv1_1 и projectname_serv2_1

Это, очевидно, проблема, поскольку my_creation_command никогда не выполнялся наконтейнеры, созданные командой up

Любое решение, которому удастся получить пользовательскую команду, выполняемую только на части создания, будет приемлемым

1 Ответ

0 голосов
/ 30 сентября 2018

Возможное и простое решение - обернуть команду init и запустить команду в уникальный скрипт (назовем его init_or_run):

version: '2.3'

services:

  serv1:
    image: my_image
    command: init_and_run

  serv2:
    image: my_image
    command: init_and_run_2

Эти сценарии должны обрабатывать случаи инициализации и запуска.Я уже сделал это для баз данных (см. Пример ниже).

Пример (с базой данных)

  • в случае инициализации init_and_run создает базу данных / таблицы
  • в случае запуска init_and_run, просто запускает демон базы данных

Проверка необходимости запуска части сценария init здесь может быть просто проверкой существования базы данных:

if database_does_not_exist
then
    create_database_and_tables # init case
fi

run_database_daemon # in both cases, run database daemon

В этом решении вам просто нужно запустить docker-compose up, чтобы запустить свои службы, не заботясь о том, что служба уже была инициализирована, потому что сценарий init_and_run будет обрабатывать оба случая (инициализация и запуск или просто запуск).

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