PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Errore durante l'esecuzione del comando psql in /docker-entrypoint-initdb.d/db_init.sh (psql:impossibile connettersi al server:connessione rifiutata)

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.