no, on-failure, always и unless-stopped; для большинства долгоживущих сервисов часто выбирают unless-stopped.
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, мониторинг и оркестрацию.
Оцени свой прогресс