Контейнер может быть запущен, но приложение внутри него уже не отвечает. Поэтому одного docker ps часто недостаточно: нужен healthcheck, который будет регулярно проверять состояние сервиса.
Представим простой HTTP-сервис, который отвечает на /health:
curl -f http://localhost:8080/health
Если команда возвращает код 0, контейнер считается здоровым. Если команда падает несколько раз подряд, Docker помечает контейнер как unhealthy.
В Dockerfile можно добавить HEALTHCHECK:
HEALTHCHECK --interval=30s --timeout=3s --retries=3 \
CMD curl -f http://localhost:8080/health || exit 1
Параметры задают частоту проверки, максимальное время ожидания и число неудачных попыток.
Соберём образ:
docker build -t app-with-health .
Запустим контейнер:
docker run -d --name app app-with-health
Теперь статус будет виден прямо в списке контейнеров:
docker ps
В выводе можно увидеть состояние:
Up 2 minutes (healthy)
Если нужно посмотреть healthcheck подробнее, используем inspect:
docker inspect --format '{{json .State.Health}}' appА чтобы вывести только текущий статус:
docker inspect --format '{{.State.Health.Status}}' appОжидаемый результат:
healthy
Healthcheck особенно полезен в связке с оркестраторами и deploy-скриптами, можно отличать “процесс запущен” от “приложение реально готово принимать запросы”.