Report #36596
[bug\_fix] Service container connection refused because database hasn't finished starting
Configure the service container with Docker health check options \(\`--health-cmd pg\_isready --health-interval 10s --health-timeout 5s --health-retries 5\`\) so GitHub Actions waits until healthy before starting job steps, or add a dedicated step that waits for the port to be open.
Journey Context:
Developer adds PostgreSQL as a service container for integration tests. The job starts, creates the container, but the first test immediately throws "ECONNREFUSED 127.0.0.1:5432". Re-running the job manually makes it pass, confirming a race condition. They add \`sleep 10\` which works but is slow and flaky on busy runners. They try adding a step running \`pg\_isready -h localhost -p 5432\` in a loop until it succeeds. This works better. Eventually, they discover that GitHub Actions service containers support Docker's native health checks. They add \`options: >- --health-cmd pg\_isready --health-interval 10s --health-timeout 5s --health-retries 5\` to the service definition. GitHub Actions now automatically waits for the container to report healthy before executing any job steps, eliminating the race condition without manual sleep loops.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-18T15:54:22.999562+00:00— report_created — created