Политика перезапуска Docker – это лучший способ автоматического запуска контейнеров при загрузке сервера или компьютера.
На этом следует закончить эту статью, но я приведу более подробную информацию, примеры и причины, по которым вам следует избегать других методов.
Политика перезапуска в Docker – это флаг, который вы устанавливаете при первом создании контейнера из образа.
Политика перезапуска определяет, должен ли контейнер перезапускаться при выходе из него.
Поведение определяется тем, какую политику вы выберете.
Контейнер может автоматически запускаться снова при ошибочных выходах или при всех кодах выхода.
Флаг также влияет на то, что произойдет, если вы вручную остановите контейнер.
Как установить политику перезапуска
Вы можете установить политику перезапуска Docker при создании контейнера или обновить существующий контейнер с новой политикой перезапуска.
Флаг политики перезапуска – –restart и имеет четыре различные опции.
Более подробную информацию можно найти на официальной странице Docker Restart Policy.
ОПЦИЯ | ДЕТАЛИ |
---|---|
no | Не перезапускать контейнер автоматически. (по умолчанию) |
on-failure | Перезапускать контейнер, если он завершает работу из-за ошибки, которая проявляется в виде ненулевого кода выхода. |
always | Всегда перезапускать контейнер, если он остановлен. Если он остановлен вручную, он перезапускается только при перезапуске демона Docker или перезапуске самого контейнера вручную. |
unless-stopped | Аналогично always, за исключением того, что когда контейнер остановлен (вручную или иным образом), он не перезапускается даже после перезапуска демона Docker. |
Следующая команда создаст контейнер, который будет всегда перезапускаться.
Большинство моих контейнеров используют “always” или “unless-stopped”.
# docker run -d --restart always <image>
Чтобы обновить политику перезапуска существующего контейнера, используйте команду docker update с нужной политикой.
Команда update может изменять несколько контейнеров одновременно.
# docker update --restart unless-stopped <container> [<container> ...]
Включение службы Docker
После запуска контейнеров с помощью политики перезапуска необходимо включить службу Docker.
Если демон Docker не запустится автоматически, ни один из ваших контейнеров не запустится.
В зависимости от вашей системы, процесс включения демона Docker будет отличаться.
Включите службу в systemd с помощью команды systemctl.
# systemctl enable docker
Для других систем init вам придется искать, как включить службы.
Скорее всего, вам придется выполнить одну команду или создать символическую ссылку.
Вы можете убедиться, что служба была включена, проверив статус включения с помощью systemctl.
# systemctl is-enabled docker
Вы можете получить более подробную информацию о состоянии службы docker, выполнив следующую команду systemctl.
Вывод будет включать лог, который поможет решить любые возникающие проблемы.
# systemctl status docker
Избегайте служб Systemd
Во многих статьях в Интернете описывается создание файла службы systemd для запуска контейнеров Docker.
Я рекомендую избегать этого, если у вас нет веских причин.
Встроенная политика перезапуска Docker лучше контролирует, когда контейнер должен перезапуститься.
Политика перезапуска также снижает сложность несколькими различными способами.
Во-первых, она не требует создания уникального служебного файла для каждого контейнера.
Во-вторых, все ваши службы Docker будут находиться внутри демона docker, а не разбросаны по всей системе.
Я уже писал служебные файлы для контейнеров, когда мне требовались предварительные и последующие задачи до и после создания и уничтожения контейнера.
В идеале ваш контейнер не должен нуждаться в каких-либо внешних задачах.
В реальном мире бывают случаи, когда вам нужно заставить что-то работать, пока вы не придумаете правильное решение.
см. также:
- 🐳 Уменьшение размера логов Docker на диске
- 🐳 Как добавлять, заменять и удалять теги образов Docker
- 🐳 Как проверить использование дискового пространства образов, контейнеров и томов Docker
- 🐳 10 инструментов, дополняющих Docker
- 🐳 Лучшие практики для контейнерных приложений