Service containers bind ports to the host, not to localhost inside the job container. Start both Postgres and MinIO manually with --network container:$(hostname) so they share the job container's network namespace and are reachable on localhost. Use docker exec for pg_isready to avoid depending on postgresql-client in the runner image. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>