Как автоматизировать рестарт зависших контейнеров в Podman

Вопрос: как автоматизировать рестарт зависших контейнеров в Podman

Линия поддержки
Линия поддержки Ответы на вопросы пользователей
20 июля 2026

Разбираемся, как быть, когда приложение не падает, а лишь «зависает» — ведь встроенные механизмы перезапуска в таких случаях не срабатывают.

Изображение записи

Комментарий пользователя

Мое приложение в контейнере периодически «зависает»: процесс не падает, но на запросы не отвечает. Как в Podman настроить healthcheck, чтобы он сам проверял доступность сервиса и перезапускал контейнер, если тот перестал отвечать?

Виктор SRE-инженер

Ответ специалиста

Привет, Виктор! В Podman healthcheck не означает автоматический рестарт. У проверки есть всего три состояния: starting, healthy и unhealthy. Если приложение зависло, контейнер просто перейдет в статус unhealthy, но Podman не станет перезапускать его самостоятельно, в отличие от того же Kubernetes.

В Podman встроена поддержка авторестарта — применяется опция --restart=always — но срабатывает она только при падении процесса, а не при  при получении им статуса unhealthy.

Чтобы решить вашу задачу, нужно настроить параметры проверки и передать управление рестартами в systemd.

Настройка параметров Healthcheck

Сначала нужно задать правила проверки. Для production-окружений обычно используют следующие параметры:

--health-interval=30s — задает интервал, при котором команда проверки выполняется каждые 30 секунд.

--health-timeout=3s — определяет время ожидания: если проверка — например, curl — не успела выполниться за три секунды, то фиксируется ошибка.

--health-retries=3-5 — устанавливает лимит: если происходят от трех до пяти неудачных проверки подряд, контейнер получает статус unhealthy.

  • Геннадий Паршако́в

    Геннадий Паршако́в

    Бэкенд-разработчик на Python

Настройка авторестарта через Quadlet и systemd

Поскольку сам Podman контейнеры не перезапускает, рекомендуется использовать Quadlet — это специальный способ описать контейнер сразу как unit-файл для systemd.
Нужно задать параметры запуска и healthcheck в файле с расширением .container — например, /etc/containers/systemd/demo.container. Чтобы добавить тот самый автоматический перезапуск, достаточно подправить конфигурацию этого unit-файла и добавить в нее директиву:


      HealthCheckOnFailure=restart

Таким образом, Podman возьмет на себя честный мониторинг состояния через healthcheck, а systemd, ориентируясь на состояние юнита, обеспечит надежный перезапуск сервиса в случае его недоступности.

Добавление таймаутов перед инициализацией

Бывает полезно поставить задержку всяческих проверок на старте контейнера, пока идет подключение к базе данных, загрузка миграций или иной длительный процесс. В противном случае, первый же запрос, который не уложится в --health-timeout, навлечет на контейнер статус unhealthy и тот будет перезапущен еще до того, как успеет завершить все стартовые действия.
За настройку задержки отвечает параметр --health-start-period. Значение для него следует подбирать по крайней мере с двукратным или даже трехкратным запасом.