Ответ
В Docker политика перезапуска контейнера задается флагом --restart. Я использую её для обеспечения отказоустойчивости сервисов.
Доступные политики:
no(по умолчанию) – не перезапускать.on-failure[:max-retries]– перезапускать только при завершении с ненулевым кодом выхода (ошибка). Можно указать максимальное количество попыток.unless-stopped– перезапускать всегда, кроме случаев, когда контейнер был явно остановлен командойdocker stop. Это мой основной выбор для production-сервисов.always– перезапускать всегда, даже послеdocker stop. Использую редко, так как это может привести к неожиданному поведению.
Пример запуска с политикой перезапуска:
docker run -d --name my-app --restart=unless-stopped -p 80:80 nginx
В Docker Compose политика указывается в секции сервиса:
services:
web:
image: nginx:alpine
restart: unless-stopped
Диагностика: Количество перезапусков контейнера можно проверить командой:
docker inspect --format='{{.RestartCount}}' <container_name>
Для тонкой настройки также можно использовать --restart-delay, чтобы задать паузу между попытками перезапуска.