PRO

Как настроить автоматический перезапуск контейнера (restart policy)?

Restart policy определяет, должен ли Docker автоматически запускать контейнер после его остановки или перезапуска Docker daemon. Основные значения: no, on-failure, always и unless-stopped; для большинства долгоживущих сервисов часто выбирают unless-stopped.
Подробный ответ

Зачем нужна restart policy

Restart policy помогает автоматически восстановить контейнер, если основной процесс неожиданно завершился или Docker daemon был перезапущен. Это базовый механизм устойчивости для одного Docker-хоста, но не замена полноценному оркестратору.

Основные значения

  • no — не перезапускать контейнер автоматически; значение по умолчанию;

  • on-failure — перезапускать при завершении с ненулевым exit code;

  • on-failure:5 — перезапускать при ошибке, но не более пяти раз;

  • always — всегда пытаться перезапустить контейнер;

  • unless-stopped — перезапускать всегда, кроме случая, когда контейнер был явно остановлен вручную.

Настройка через docker run

docker run -d \
  --name web \
  --restart unless-stopped \
  -p 8000:8000 \
  my-app:1.4.0

Настройка в Compose

services:
  web:
    image: my-app:1.4.0
    restart: unless-stopped

Что restart policy не делает

Policy реагирует на остановку контейнера, но не определяет, работает ли приложение корректно. Если процесс продолжает работать, но endpoint не отвечает или контейнер получил статус unhealthy, Docker restart policy сама по себе не выполнит перезапуск только из-за health status.

Когда выбрать policy

Для долгоживущих web-сервисов на одном сервере часто используют unless-stopped. Для batch-задач и миграций policy обычно не нужна. Для процессов, которые должны завершиться при ошибке после ограниченного числа попыток, подходит on-failure:N.

Как ответить на собеседовании

Restart policy настраивается через --restart или поле restart в Compose. Для долгоживущего сервиса я часто выбираю unless-stopped, для ограниченного числа повторов — on-failure:N. При этом помню, что policy реагирует на остановку процесса, а не заменяет health checks, мониторинг и оркестрацию.

Оцени свой прогресс

Честно оцени своё понимание этого вопроса, чтобы мы могли построить твой учебный трек максимально эффективно.
Читать в блоге