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.