sql >> Base de Datos >  >> RDS >> PostgreSQL

Error al ejecutar el comando psql en /docker-entrypoint-initdb.d/db_init.sh (psql:no se pudo conectar al servidor:conexión rechazada)

Parece que esta confirmación ha roto tu guión.

Explicación:

PostgreSQL puede aceptar conexiones no solo a través de TCP/IP, sino también a través de un socket UNIX. El -h localhost el argumento le dice a psql para usar conexiones TCP en lugar de socket UNIX.

Si observa el actual docker-entrypoint.sh versión, verá que durante la ejecución de scripts en /docker-entrypoint-initdb.d PostgreSQL solo escucha en el socket UNIX y el registro de inicio dice:

LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"

Esto significa que psql -h localhost no se conectará a la base de datos, ya que PostgreSQL no escucha en el socket IP. Debe usar psql sin -h localhost opción para que use un socket UNIX en lugar de conexiones TCP.

Pero, ¿por qué ejecutar psql -h localhost? funciona manualmente?

Si observa el docker-entrypoint.sh de nuevo, verá que cuando se ejecutan todos los scripts de inicio, PostgreSQL está siendo detenido y luego iniciado de nuevo en modo normal (operativo), en el que escucha tanto en UNIX como en sockets 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"

Entonces, cuando se complete el proceso de inicio, puede conectarse a PostgreSQL usando conexiones TCP, ingresando al contenedor y ejecutando psql -h localhost tiene éxito.