diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh index f233433..d435da9 100755 --- a/docker/entrypoint.sh +++ b/docker/entrypoint.sh @@ -38,15 +38,37 @@ host = parsed.hostname or "postgres" port = parsed.port or 5432 deadline = time.time() + float(os.environ.get("DB_WAIT_SECONDS", "180")) +# Report WHY it is not connecting, not just that it isn't: the first failure +# immediately, then every 30s. A silent retry loop that ends in "never accepted" +# tells whoever is installing this precisely nothing. +last_error = None +next_report = 0.0 + while time.time() < deadline: try: with socket.create_connection((host, port), timeout=3): print(f"[entrypoint] database accepting connections at {host}:{port}") sys.exit(0) - except OSError: + except OSError as exc: + last_error = exc + if time.time() >= next_report: + try: + resolved = socket.gethostbyname(host) + except OSError as dns_exc: + resolved = f"UNRESOLVED ({dns_exc})" + print( + f"[entrypoint] waiting for {host}:{port} " + f"(resolves to {resolved}): {type(exc).__name__}: {exc}", + flush=True, + ) + next_report = time.time() + 30 time.sleep(2) -print(f"[entrypoint] ERROR: {host}:{port} never accepted a connection", file=sys.stderr) +print( + f"[entrypoint] ERROR: {host}:{port} never accepted a connection. " + f"Last error: {type(last_error).__name__}: {last_error}", + file=sys.stderr, +) sys.exit(1) PYEOF }