2015-10-09 5 views
2

У меня есть две докеры: один - интерфейс nginx, а другой - приложение expressjs. Nginx - это точка входа, и он выполняет прокси для выражения.Как обновить ссылки на контейнер

я:

docker run -d --name 'expressjs' geographica/expressjs 

docker run -d --name 'nginx' --link expressjs nginx 

После этого, когда я обновить изображение Географике/expressjs мне нужно воссоздал expressjs контейнер:

docker stop expressjs && docker rm expressjs && docker run -d --name 'expressjs' geographica/expressjs 

На этом этапе я также необходимо воссоздать контейнер Nginx , Как это сделать без повторного создания контейнера nginx?

Это упрощение нашей проблемы, наш настоящий сервер имеет приложения nginx frontend и N, поэтому каждый раз, когда мы обновляем одно из приложений, нам необходимо перезапустить nginx и остановить службу для других приложений.

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

ОБНОВЛЕНО:

Я также думаю, что что-то подобное, что было бы полезно. https://github.com/docker/docker/issues/7468. с командой docker link для изменения связей контейнера во время выполнения. К сожалению, он еще не доступен в 1.8.2.

ответ

2

Об этом шла речь в issue 6350:

Если я явно сделать докер перезагрузки IP правильно обновляется, однако я использовал «systemctl перезагрузка», который делает остановку, убить и гт до запуска

в этом случае («стоп - гт - беги»), ссылки не обновляется:

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

Не всегда имеет смысл сохранить эту «ссылку», ведь новый контейнер может быть совершенно не связан.

Мое решение и мой совет, является то, что:

  • вы смотрите на что-то немного более прочной, как Ambassador pattern, что это просто причудливый способ сказать вам ссылку на прокси-сервер, который вы никогда не перезагружать - чтобы поддерживать докеры.
    (также introduced here)
  • Другим решением является только docker create, docker start и docker stop вместо docker rm.
  • Наконец, моим фактическим решением было использовать что-то вроде SkyDNS или docker-gen для хранения центрального DNS со всеми именами контейнеров. Это последнее решение для меня лучше, потому что оно позволяет мне перемещать контейнеры между хостами, а привязка докеров не может работать так.

С следующими версиями грузчика, libnetwork будет на самом деле путь.
(см. "The Container Network Model (CNM)", и "Docker Online Meetup #22: Docker Networking - video")

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