2016-04-20 3 views
2

У меня есть приложение, работающее на нескольких контейнерах Docker, определенное docker-compose. Все работает отлично от моего пользователя и docker-compose ps выхода выглядит следующим образом:Повторное использование контейнеров с `docker-compose`

 Name    Command   State  Ports 
------------------------------------------------------------ 
myuser_app_1 /config/bootstrap.sh Exit 137 
myuser_data_1 sh      Exit 0 
myuser_db_1  /run.sh    Exit 143 

Теперь я пытаюсь запустить docker-compose up с supervisord (см соответствующей части supervisord.conf ниже), и вопрос заключается в том, что контейнеры теперь называется myapp_app_1, myapp_data_1 и myapp_db_1, то есть они создаются с нуля, и все настройки на прежних контейнерах теряются.

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

Вопрос: Есть ли способ заставить docker-compose использовать существующие контейнеры вместо создания новых на основе соответствующих изображений?

supervisord.conf

... 
[program:myapp] 
command=/usr/local/bin/docker-compose 
    -f /usr/local/app/docker-compose.yml up 
redirect_stderr=true 
stdout_logfile=/var/log/myapp_container.log 
stopasgroup=true 
user=myuser 
+0

Если вам нужен только один контейнер для каждого приложения, вы можете использовать 'container_name: app' в файле docker-compose.yml –

+1

' docker-compose' по умолчанию использует имя папки yml-файла в качестве имени проекта и префикс это имя для всех имен контейнеров. Вы можете указать название проекта, используя 'docker-compose -p custom_name'. Я не уверен, что это приведет к повторному использованию существующих контейнеров с одинаковыми именами. Сначала попробуйте сначала проверить это на неважных контейнерах, если у вас есть важные данные, которые вы не хотите перезаписывать. –

ответ

2

Compose will always reuse containers as long as their config hasn't changed.

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

Если вам нужно инициализировать что-то, я бы сделал это в файле Docker, чтобы он сохранялся на изображении.

+0

Наконец, мне удалось повторно использовать тома данных, указав 'volume_from' в' docker-compose.yml'. Спасибо за подсказки. – fernandezcuesta

Смежные вопросы