Что такое health check в Docker?
Health check — это механизм Docker, позволяющий определять, работает ли приложение внутри контейнера корректно. По результатам проверки контейнер получает один из статусов: healthy, unhealthy или starting.
Определение в Dockerfile
Пример
HEALTHCHECK --interval=30s --timeout=10s --retries=3 --start-period=60s \
CMD wget --no-verbose --tries=1 --spider http://localhost:8080/actuator/health || exit 1
Параметры
| Параметр | Описание | По умолчанию |
|---|---|---|
--interval |
Как часто выполнять проверку | 30 с |
--timeout |
Максимальное время ожидания ответа | 30 с |
--retries |
Сколько неудачных проверок подряд для статуса unhealthy | 3 |
--start-period |
Начальный период, в течение которого неудачные проверки не учитываются | 0 с |
Определение в docker-compose.yml
Пример
services:
app:
build: .
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider",
"http://localhost:8080/actuator/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
Использование с depends_on (Compose V2)
Пример
services:
app:
depends_on:
db:
condition: service_healthy
db:
image: postgres:16-alpine
healthcheck:
test: ["CMD-SHELL", "pg_isready -U admin -d mydb"]
interval: 10s
timeout: 5s
retries: 5
Spring Boot Actuator
Для Spring Boot рекомендуется использовать Spring Boot Actuator (/actuator/health):
Пример
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Пример
# application.yml
management:
endpoints:
web:
exposure:
include: health
endpoint:
health:
show-details: never
В Alpine-образах curl отсутствует по умолчанию, поэтому используйте wget (он есть в Alpine).
На собеседовании: health check нужен для двух целей: (1) Docker/оркестратор знает, жив ли контейнер, (2)
depends_onсcondition: service_healthyпозволяет ждать реальной готовности сервиса, а не просто запуска контейнера. Для Spring Boot — используйте Actuator endpoint. Не забудьте про start_period — без него health check будет считать контейнер unhealthy во время запуска приложения.