← Назад к вопросам

Какие знаешь restart политики в Docker?

2.2 Middle🔥 201 комментариев
#Docker и контейнеризация

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Docker Restart Policies: управление поведением контейнеров при сбоях

В Docker restart политики (restart policies) определяют, как система должна реагировать на остановку контейнера — автоматически перезапускать его или нет. Это ключевой механизм для обеспечения высокой доступности и устойчивости сервисов в контейнерной инфраструктуре. Политики задаются через параметр --restart при создании контейнера (docker run) или в файле docker-compose.yml.

Основные политики restart в Docker

Docker предоставляет четыре основные политики:

  1. no (default) — контейнер не будет перезапущен автоматически при любой остановке. Это поведение по умолчанию.

    docker run --restart=no nginx
    
  2. always — контейнер будет перезапущен всегда, независимо от причины остановки (кроме случаев, когда контейнер остановлен явно командой docker stop). Это включает перезапуск даже после успешного завершения (exit code 0) или сбоев системы Docker. Политика полезна для критических сервисов, которые должны работать постоянно.

    docker run --restart=always nginx
    
  3. on-failure — контейнер перезапускается только при выходе с ненулевым кодом ошибки (например, crash приложения). Можно указать максимальное количество попыток перезапуска: on-failure:N, где N — число попыток.

    docker run --restart=on-failure:5 my-app
    
  4. unless-stoppedсамая практичная и часто используемая политика в production. Контейнер будет автоматически перезапускаться при любой остановке, за исключением случаев, когда он был явно остановлен пользователем через docker stop. После остановки он не запустится даже при рестарте демона Docker или всей системы, пока его не запустят явно. Это идеально для сервисов, которые должны работать "по умолчанию", но позволяет администраторам временно остановить их.

    docker run --restart=unless-stopped database
    

Как это работает и важные детали

  • Политика применяется демоном Docker (dockerd) при его запуске или при обнаружении остановки контейнера.
  • Для проверки политики конкретного контейнера:
    docker inspect --format='{{.HostConfig.RestartPolicy.Name}}' <container_name>
    
  • В Docker Compose политика указывается в секции deploy (для swarm) или непосредственно для сервиса:
    version: '3.8'
    services:
      web:
        image: nginx
        restart: unless-stopped
    
  • Механизм перезапуска включает задержку (delay), чтобы избежать бесконечных циклов при постоянных сбоях. Docker увеличивает задержку между попытками (по умолчанию, экспоненциально от 100ms до 1 minute).
  • Политика always может привести к нежелательным перезапускам контейнеров, которые выполнили свою работу и завершились штатно (например, batch job). Для таких задач используйте no или on-failure.

Практическое применение и выбор политики

  • unless-stoppedстандартный выбор для production сервисов (веб-серверы, базы данных, микросервисы). Сервис восстанавливается после перезагрузки сервера или сбоя демона Docker, но позволяет контролируемое обслуживание.
  • on-failure — для задач или приложений, которые могут завершиться с ошибкой, но где бесконечный перезапуск не нужен (например, обработчики очередей с временными проблемами подключения).
  • always — для контейнеров, которые должны быть активны даже после штатного завершения (редкий случай, обычно для legacy систем).
  • no — для одноразовых задач, тестовых контейнеров, или контейнеров, состояние которых должно сохраняться после остановки.

Итог: Restart политики — это фундаментальный инструмент управления жизненным циклом контейнеров. Правильный выбор (unless-stopped для долговечных сервисов, on-failure для задач с возможными сбоями) значительно повышает отказоустойчивость инфраструктуры без необходимости внешних мониторинговых систем (например, systemd или supervisord) внутри контейнеров.

Какие знаешь restart политики в Docker? | PrepBro