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.