Политика перезапуска 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, а не разбросаны по всей системе.

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

В идеале ваш контейнер не должен нуждаться в каких-либо внешних задачах.

В реальном мире бывают случаи, когда вам нужно заставить что-то работать, пока вы не придумаете правильное решение.

см. также:

 

 

Поделитесь статьей:

Добавить комментарий