HEALTHCHECK в Docker используется, чтобы контейнер регулярно самопроверялся, а Docker мог отличать состояние «процесс запущен» от «сервис реально работает». Команда healthcheck возвращает код успеха или ошибки, по которому контейнер помечается как healthy, unhealthy или starting. Это позволяет в продакшене автоматически выявлять «зависшие» контейнеры и перезапускать или выводить их из-под трафика.
HEALTHCHECK — это инструкция в Dockerfile, задающая команду для периодической проверки «здоровья» контейнера. Без неё Docker знает только, жив ли главный процесс; с ней он может понять, что приложение внутри контейнера действительно отвечает и ведёт себя так, как ожидается. По результату проверок Docker выставляет контейнеру статус starting (проверки ещё идут), healthy или unhealthy, и это уже можно использовать в автоматизации и оркестрации.
HEALTHCHECK Docker будет считать такой контейнер исправным.Dockerfile описывается команда проверки (часто HTTP-запрос или внутренний скрипт). Docker периодически её запускает; код возврата 0 означает healthy, любой ненулевой — unhealthy, пока ещё не набралось достаточно успешных проверок — starting.restart-policy, не слать на него трафик (если это учитывается балансировщиком), быстрее находить проблемные инстансы при отладке инцидентов.docker ps и в docker inspect, что удобно для диагностики: контейнер может быть «Up», но помечен как unhealthy, и это сразу сигнал к разбору.HEALTHCHECK при перезапусках задач. В Kubernetes обычно используют собственные пробы (liveness и readiness) вместо HEALTHCHECK из образа, но идея та же — регулярно проверять жизнеспособность и готовность сервиса.Краткий пример Dockerfile с инструкцией HEALTHCHECK, которая проверяет, что nginx отвечает по HTTP внутри контейнера:
После сборки такого образа и запуска контейнера статус здоровья можно увидеть через docker ps; по нему легко отличить исправный и проблемный инстанс одного и того же сервиса:
Таким образом, HEALTHCHECK позволяет встроить в образ простую, но полезную самодиагностику и дать Docker и оркестраторам более точную картину состояния сервиса, чем просто факт запущенного процесса.
Отметьте свой прогресс