Предполагая, что демон Docker автоматически перезагружается любым процессом init.d или systemd, когда ОС перезагружается, что является предпочтительным способом перезапуска одного или нескольких контейнеров Docker? Например, у меня может быть несколько веб-серверов за обратным прокси-сервером или сервером базы данных.
Как автоматически перезапустить контейнер Docker после перезагрузки в CoreOS?
Ответ 1
CoreOS использует systemd для управления долгосрочными службами:
Ответ 2
если вы запустите демон с помощью docker -d -r
, он перезапустит все контейнеры, которые были запущены до того, как демон остановился.
Это станет поведением по умолчанию в следующей версии.
Ответ 3
Что сработало для меня - добавить --restart='always'
в команду container {run -d...}
Ответ 4
Для людей, которые хотят автоматически перезапустить контейнер докеров, но не указали флаг --restart
(по умолчанию "нет" ) во время его запуска, вы можете использовать docker update, чтобы добавить одну из следующих трех других опций:
- на провал
- если-не остановлен
- всегда
Подробнее см. этот пост. У людей проблемы с always
флажком перезапуска, можно рассмотреть возможность использования опции on-failure
или unless-stopped
.
Ответ 5
Единственная документация, которую я видел, - это Документы по интеграции хоста Docker, которые немного освещают детали и т.д.
По сути, он предлагает запустить демон с -r=false
и использовать systemd (или использовать upstart, если вы используете что-то отличное от CoreOS).
Ответ 6
Используется Restart
и RestartSec
, чтобы заставить его работать:
# Restart after crash
Restart=on-failure
# Give the service 10 seconds to recover after the previous restart
RestartSec=10s
Просмотрите документацию.