PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Fehler beim Ausführen des psql-Befehls in /docker-entrypoint-initdb.d/db_init.sh (psql:Verbindung zum Server konnte nicht hergestellt werden:Verbindung abgelehnt)

Es sieht aus wie dieses Commit hat Ihr Skript beschädigt.

Erklärung:

PostgreSQL akzeptiert Verbindungen nicht nur über TCP/IP, sondern auch über UNIX-Sockets. Der -h localhost Argument teilt psql mit TCP-Verbindungen anstelle von UNIX-Sockets zu verwenden.

Wenn Sie sich die aktuelle docker-entrypoint.sh Version sehen Sie, dass während der Ausführung von Skripten in /docker-entrypoint-initdb.d PostgreSQL lauscht nur auf dem UNIX-Socket und das Startprotokoll sagt:

LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"

Das bedeutet, dass psql -h localhost stellt keine Verbindung zur Datenbank her, da PostgreSQL nicht auf dem IP-Socket lauscht. Sie müssen psql verwenden ohne -h localhost Option, um UNIX-Socket anstelle von TCP-Verbindungen zu verwenden.

Aber warum psql -h localhost ausführen? manuell funktioniert?

Wenn Sie in die docker-entrypoint.sh schauen Auch hier werden Sie sehen, dass, wenn alle Init-Skripte ausgeführt werden, PostgreSQL angehalten und dann gestartet wieder im normalen (Betriebs-)Modus, in dem es sowohl auf UNIX- als auch auf IP-Sockets lauscht:

LOG:  listening on IPv4 address "0.0.0.0", port 5432
LOG:  listening on IPv6 address "::", port 5432
LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"

Wenn der Startvorgang abgeschlossen ist, können Sie sich also über TCP-Verbindungen mit PostgreSQL verbinden, also in den Container eintreten und psql -h localhost ausführen gelingt.