Zero-downtime обновление контейнера через healthcheck

Практические лайфхаки для разработчиков, DevOps и админов: Docker, Linux, Bash, Python, Golang, Ansible, логи и безопасность — только рабочие решения. Даем готовые команды, конфиги и приёмы диагностики, которые экономят часы и дни. Если нужно быстро настроить, отладить и обезопасить инфраструктуру — вы по адресу.

dockerhealthcheckобновление

👁 В Docker многие до сих пор обновляют сервис через docker stop && docker run, что даёт пусть и короткий, но даунтайм. В проде это недопустимо. Даже без Kubernetes можно сделать аккуратное обновление без падения сервиса, если правильно использовать healthcheck и стратегию переключения.

📝 Настройка healthcheck для контроля состояния контейнера

Healthcheck позволяет Docker понимать, готов ли контейнер принимать трафик, а не просто «запущен ли процесс». Контейнер будет считаться healthy только если реально отвечает HTTP.

FROM nginx:alpine

HEALTHCHECK --interval=5s --timeout=2s --retries=3 \
  CMD curl -f http://localhost/ || exit 1

📝 Запуск новой версии параллельно старой

Вместо остановки старого контейнера, поднимаем новый с другим именем или портом.

docker run -d --name app_v2 -p 8081:80 myapp:latest

📌После этого проверяем, что новый контейнер перешёл в состояние healthy и реально обрабатывает запросы.

📝 Переключение трафика без даунтайма

После проверки можно переключить трафик (например, через reverse proxy или балансировщик) на новый контейнер и только потом остановить старый. Таким образом, пользователи вообще не замечают обновления.

docker stop app_v1
docker rm app_v1

❗️ Даже без оркестрации можно делать обновления без даунтайма. Главное — не путать «контейнер запущен» и «сервис реально готов работать», и всегда проверять health перед переключением.

tags: #docker #разработка #оптимизация

🧭 @recura_tech 🌐 VK 🌐 MAX

Карточка RECURA: тёмный фон с окошком кода, пример Dockerfile с HEALTHCHECK и команды docker run/stop, логотип RECURA.
Пример конфигурации HEALTHCHECK и команд для плавного переключения контейнеров.

Читайте так же