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.