Sembra questo commit ha rotto il tuo script.
Spiegazione:
PostgreSQL può accettare connessioni non solo tramite TCP/IP, ma anche tramite socket UNIX. Il -h localhost
argomento dice a psql
per utilizzare connessioni TCP anziché socket UNIX.
Se esamini l'attuale docker-entrypoint.sh
versione, vedrai, che durante l'esecuzione degli script in /docker-entrypoint-initdb.d
PostgreSQL è in ascolto solo sul socket UNIX e il registro di avvio dice:
LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
Ciò significa che psql -h localhost
non si connetterà al database, poiché PostgreSQL non è in ascolto su socket IP. Devi usare psql
senza -h localhost
opzione per utilizzare il socket UNIX invece delle connessioni TCP.
Ma perché eseguire psql -h localhost
funziona manualmente?
Se guardi in docker-entrypoint.sh
di nuovo, vedrai che quando tutti gli script di init vengono eseguiti, PostgreSQL è fermato
e quindi iniziato
sempre in modalità normale (operativa), in cui è in ascolto sia su socket UNIX che IP:
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"
Quindi, quando il processo di avvio è completo, puoi connetterti a PostgreSQL usando connessioni TCP, entrando così nel contenitore ed eseguendo psql -h localhost
riesce.