Docker restart policy: автоматический перезапуск контейнеров - Компьюти
Logo КОМПЬЮТИ

Docker restart policy: автоматический перезапуск контейнеров

Время на прочтение: 2 мин.

Restart policy определяет, что Docker должен делать, если контейнер завершился.

Это особенно важно для серверных приложений: веб-сайт, Nginx, Redis или worker не должны оставаться остановленными после случайного сбоя.

Docker поддерживает несколько основных политик:

  • no;
  • always;
  • on-failure;
  • unless-stopped.

Они также доступны в Compose через параметр restart.

restart: no

Это значение по умолчанию.

services:
  app:
    image: my-app
    restart: "no"

Контейнер автоматически не перезапускается.

restart: always

services:
  app:
    image: my-app
    restart: always

Docker будет перезапускать контейнер при завершении.

Это часто используют для постоянно работающих сервисов.

restart: unless-stopped

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

Сервис будет автоматически запускаться снова, если Docker перезапустился или контейнер завершился, но ручная остановка учитывается.

Для многих серверных приложений это удобный вариант.

restart: on-failure

services:
  worker:
    image: my-worker
    restart: on-failure

Контейнер перезапускается, если завершился с ошибкой.

Можно ограничить количество попыток:

restart: on-failure:5

Docker определяет on-failure по ненулевому коду завершения.

Docker run

Политика может задаваться при запуске:

docker run -d \
  --restart unless-stopped \
  nginx

Проверка restart policy

Можно посмотреть конфигурацию:

docker inspect container

И найти поле:

RestartPolicy

Restart policy не исправляет ошибки

Это важный момент.

Если приложение падает из-за неправильной конфигурации:

start
crash
restart
crash
restart
...

restart policy будет лишь запускать его снова.

Поэтому при циклическом рестарте сначала нужно смотреть логи:

docker logs container

Подробнее — в статье «Docker logs».

Restart policy и базы данных

Для PostgreSQL, Redis и других сервисов автоматический запуск полезен, но не заменяет:

  • healthcheck;
  • backup;
  • мониторинг;
  • корректное завершение;
  • контроль ресурсов.

Restart policy и Compose

Например:

services:
  nginx:
    image: nginx:alpine
    restart: unless-stopped

  redis:
    image: redis:alpine
    restart: unless-stopped

При production-развертывании Compose рекомендует рассматривать restart policy как один из элементов настройки сервиса.

Restart и healthcheck

Restart policy и healthcheck решают разные задачи.

Healthcheck проверяет состояние приложения.

Restart policy определяет поведение при завершении контейнера.

Если процесс внутри контейнера продолжает работать, но приложение фактически не отвечает, одной restart policy может быть недостаточно.

Типичные ошибки

Использовать always для всего

Не каждый контейнер должен автоматически перезапускаться.

Игнорировать причину падения

Бесконечные рестарты могут скрывать ошибку.

Не использовать healthcheck

Для сложных сервисов важно проверять не только наличие процесса, но и готовность приложения.

Рассчитывать на restart вместо backup

Автоматический запуск не восстанавливает потерянные данные.

Пример production-стека

services:
  nginx:
    image: nginx:alpine
    restart: unless-stopped

  app:
    image: my-app
    restart: unless-stopped

  postgres:
    image: postgres:18
    restart: unless-stopped

  redis:
    image: redis:alpine
    restart: unless-stopped

Дополнительно стоит настроить volumes, healthchecks, мониторинг и backup.

Читайте также:


Читайте также:

Приглашаем поучаствовать в обсуждении статьи:

Комментариев 0