Vypadá to jako porušil váš skript.
Vysvětlení:
PostgreSQL může přijímat připojení nejen přes TCP/IP, ale také přes UNIX socket. -h localhost
argument říká psql
používat připojení TCP místo soketu UNIX.
Pokud se podíváte na aktuální docker.
verze, uvidíte, že během provádění skriptů v /docker-entrypoint-initdb.d
PostgreSQL naslouchá pouze na UNIX socketu a spouštěcí protokol říká:
LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
To znamená, že psql -h localhost
se nepřipojí k databázi, protože PostgreSQL nenaslouchá na IP soketu. Musíte použít psql
bez -h localhost
možnost, aby používal soket UNIX místo připojení TCP.
Ale proč spouštět psql -h localhost
pracuje ručně?
Pokud se podíváte do docker-entrypoint.sh
znovu uvidíte, že když jsou provedeny všechny init skripty, PostgreSQL je zastaveno
a poté začal
opět v normálním (provozním) režimu, ve kterém poslouchá na UNIX i IP socketech:
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"
Po dokončení procesu spouštění se tedy můžete připojit k PostgreSQL pomocí připojení TCP, tedy vstoupit do kontejneru a spustit psql -h localhost
uspěje.