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.
Читайте также:


