Какие знаешь restart политики в Docker?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Docker Restart Policies: управление поведением контейнеров при сбоях
В Docker restart политики (restart policies) определяют, как система должна реагировать на остановку контейнера — автоматически перезапускать его или нет. Это ключевой механизм для обеспечения высокой доступности и устойчивости сервисов в контейнерной инфраструктуре. Политики задаются через параметр --restart при создании контейнера (docker run) или в файле docker-compose.yml.
Основные политики restart в Docker
Docker предоставляет четыре основные политики:
-
no(default) — контейнер не будет перезапущен автоматически при любой остановке. Это поведение по умолчанию.docker run --restart=no nginx -
always— контейнер будет перезапущен всегда, независимо от причины остановки (кроме случаев, когда контейнер остановлен явно командойdocker stop). Это включает перезапуск даже после успешного завершения (exit code 0) или сбоев системы Docker. Политика полезна для критических сервисов, которые должны работать постоянно.docker run --restart=always nginx -
on-failure— контейнер перезапускается только при выходе с ненулевым кодом ошибки (например, crash приложения). Можно указать максимальное количество попыток перезапуска:on-failure:N, гдеN— число попыток.docker run --restart=on-failure:5 my-app -
unless-stopped— самая практичная и часто используемая политика в production. Контейнер будет автоматически перезапускаться при любой остановке, за исключением случаев, когда он был явно остановлен пользователем черезdocker stop. После остановки он не запустится даже при рестарте демона Docker или всей системы, пока его не запустят явно. Это идеально для сервисов, которые должны работать "по умолчанию", но позволяет администраторам временно остановить их.docker run --restart=unless-stopped database
Как это работает и важные детали
- Политика применяется демоном Docker (
dockerd) при его запуске или при обнаружении остановки контейнера. - Для проверки политики конкретного контейнера:
docker inspect --format='{{.HostConfig.RestartPolicy.Name}}' <container_name> - В Docker Compose политика указывается в секции
deploy(для swarm) или непосредственно для сервиса:version: '3.8' services: web: image: nginx restart: unless-stopped - Механизм перезапуска включает задержку (delay), чтобы избежать бесконечных циклов при постоянных сбоях. Docker увеличивает задержку между попытками (по умолчанию, экспоненциально от 100ms до 1 minute).
- Политика
alwaysможет привести к нежелательным перезапускам контейнеров, которые выполнили свою работу и завершились штатно (например, batch job). Для таких задач используйтеnoилиon-failure.
Практическое применение и выбор политики
unless-stopped— стандартный выбор для production сервисов (веб-серверы, базы данных, микросервисы). Сервис восстанавливается после перезагрузки сервера или сбоя демона Docker, но позволяет контролируемое обслуживание.on-failure— для задач или приложений, которые могут завершиться с ошибкой, но где бесконечный перезапуск не нужен (например, обработчики очередей с временными проблемами подключения).always— для контейнеров, которые должны быть активны даже после штатного завершения (редкий случай, обычно для legacy систем).no— для одноразовых задач, тестовых контейнеров, или контейнеров, состояние которых должно сохраняться после остановки.
Итог: Restart политики — это фундаментальный инструмент управления жизненным циклом контейнеров. Правильный выбор (unless-stopped для долговечных сервисов, on-failure для задач с возможными сбоями) значительно повышает отказоустойчивость инфраструктуры без необходимости внешних мониторинговых систем (например, systemd или supervisord) внутри контейнеров.