Docker Compose: Healthcheck для PostgreSQL-ждём pg_isready перед стартом сервиса
Мини-пример docker-compose.yml, где healthcheck оценивает готовность PostgreSQL через pg_isready. Избавьтесь от race-condition и «Connection refused».
**Как это работает**
pg_isready выходит с 0, если сервер готов. Пока healthcheck не успешен, статус контейнера starting; backend не запустится, пока БД не перейдёт в healthy. Решает классическую проблему «поднялся раньше, чем PostgreSQL».
# docker-compose.yml
version: "3.9"
services:
db:
image: postgres:16
ports:
- "5432:5432"
environment:
POSTGRES_USER: app
POSTGRES_PASSWORD: secret
POSTGRES_DB: app_db
healthcheck:
test: ["CMD-SHELL", "pg_isready -U app -d app_db"]
interval: 10s # проверять каждые 10 секунд
timeout: 5s
retries: 5
start_period: 5s
backend:
build: .
depends_on:
db:
condition: service_healthy # ждём, пока БД станет «healthy»