2013-09-13 7 views
31

Предполагается, что демон Docker автоматически перезагружается любым процессом init.d или systemd, когда ОС перезагружается, что является предпочтительным способом перезапуска одного или нескольких контейнеров Docker? Например, у меня может быть несколько веб-серверов за обратным прокси-сервером или сервером базы данных.Как автоматически перезапустить контейнер Docker после перезагрузки в CoreOS?

+1

Хорошо, меня действительно интересует полная противоположная проблема: Я сказал, что restart = всегда для контейнера, который, казалось, работал, а теперь, после перезапуска демона, я не могу найти способ отключить эту функцию автоматического перезапуска для этого конкретного контейнера! – tjborromeo

+0

DOH! Я прочитал, что команда CoreOS предпочитает использовать флот или systemd для реализации перезапуска. – Richard

+0

Yup, похоже, означает, что я не должен использовать встроенные функции докера для автоматического перезапуска в любом случае, как и при любой настройке, которую вы планируете управлять, вам нужна гибкость в определении того, когда контейнер должен перераспределять (и когда демон docker должен перезапустить). Это немного усложняется тем фактом, что команда 'docker inspect', похоже, подразумевает, что атрибут перезапуска является частью и посылкой к изображению, когда-то запущенному (подобно открытым портам). Таким образом, как только вы определяете атрибут автоматического перезапуска, вы не можете изменить свое мнение :( – tjborromeo

ответ

14

CoreOS использует Systemd управлять долго запущенными службами:

+0

Поскольку я перемещаю все свои услуги для CoreOS это похоже на лучший способ пойти сейчас. – Richard

+0

@ Рихард. Даже если это так, вы должны по-прежнему считать решение creack лучшим ответом (более полезным для людей в других операционных системах). – michielbdejong

+0

Ответ Марка не ошибается. Я имел в виду CoreOS (хотя я не упоминал об этом конкретно), это подразумевалось systemd и initd. С тех пор появились новые [методы обновления] (https://coreos.com/docs/cluster-management/setup/update-strategies/), которые работают совместно. – Richard

29

, если вы запустите демон с docker -d -r, он будет перезагружен все контейнеры, которые были запущены до демонов останавливали. Это станет поведением по умолчанию в следующей версии.

+0

, так что это означает, что ОС хоста перезагрузилась с запущенными контейнерами или, возможно, сбой системы? В первом случае это означает, что докер подключен к различным сигналам выключения/перезагрузки? – Richard

+7

Когда система перезагружается, есть вероятность, что контейнер будет убит до докера. Если это произойдет, контейнер не будет перезапущен. Docker не подключен к сигналам выключения/перезагрузки. – creack

+0

Это был ранее правильный ответ, но после обзора он оказался в ошибке. (a) в нем отсутствует ACTION, который, вероятно, был RUN, однако '-r' недоступен. – Richard

1

Единственная документация которую я видел, Docker's Host Integration docs которые немного света на детали и т.д.

В основном, это говорит о запуске демона с -r=false и использованием Systemd (или выскочка, если вы используете что-то другое, чем CoreOS).

7

То, что сработало для меня, чтобы добавить --restart='always' в контейнер {запустить -d ...} Команда

+2

В соответствии с моим комментарием к исходному вопросу, я не знаю, как изменить это на изображении, когда-то начатое. Поэтому, если я хочу временно отключить функцию перезапуска, и изначально я не диктовал «on-failure», я не знаю, как остановить автоматический перезапуск контейнера :(Это больно, когда я использовал порт, который мне нужен для другого изображения ... – tjborromeo

+0

Да, у меня была проблема с командой --restart = 'always', так как, когда я, наконец, хотел диктовать _not_ авто-перезагрузку этого конкретного контейнера, я не мог жизнь меня выясняет, как отключить этот параметр, не удаляя контейнер! – tjborromeo

-1

Restart Используется и RestartSec, чтобы сделать его работу:

# Restart after crash 
Restart=on-failure 
# Give the service 10 seconds to recover after the previous restart 
RestartSec=10s 

Посмотреть the documentation.

0

Для людей хотят автоматического перезапуска Docker контейнер, но не уточнил, --restart флаг (по умолчанию «нет») во время работы, вы можете использовать Docker update команду, чтобы добавить один из следующих трех вариантов:

  • на провал
  • если-не остановленного
  • всегда

См this post для деталей. У людей есть проблемы с флагом перезагрузки always, можете рассмотреть возможность использования опции on-failure или unless-stopped.

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