Как работают depends_on и healthcheck в Docker Compose?
Docker Compose
`depends_on` задаёт порядок запуска сервисов, а `healthcheck` определяет, когда сервис действительно готов принимать запросы.
Проблема
По умолчанию depends_on ждёт только старта контейнера, а не готовности приложения: база уже запущена, но ещё не принимает соединения, и приложение падает.
Решение
services:
db:
image: postgres:16
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 5s
timeout: 3s
retries: 10
api:
build: .
depends_on:
db:
condition: service_healthy # ждать, пока проверка здоровья пройдётУсловия
service_started— контейнер запущен (по умолчанию).service_healthy— проверка здоровья успешна.service_completed_successfully— для одноразовых задач, например миграций.
Дополнительно
Приложению стоит самому повторять подключение с паузой: временные сбои возможны и после старта.
Коротко для собеседования
depends_on без условия ждёт только запуск. Для готовности нужен healthcheck и condition: service_healthy.