Det ser ut som att docker-entrypoint.sh#L111">docker-entrypoint.sh#L111">
version kommer du att se att under körningen av skript i /docker-entrypoint-initdb.d
PostgreSQL lyssnar bara på UNIX-socket, och startloggen säger:
LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
Detta betyder att psql -h localhost
kommer inte att ansluta till databasen, eftersom PostgreSQL inte lyssnar på IP-socket. Du måste använda psql
utan -h localhost
alternativet för att få den att använda UNIX-socket istället för TCP-anslutningar.
Men varför köra psql -h localhost
fungerar manuellt?
Om du tittar på docker-entrypoint.sh
igen, du kommer att se att när alla init-skript körs, är PostgreSQL stoppad
och sedan startade
igen i normalt (operativt) läge, där den lyssnar både på UNIX- och IP-sockets:
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"
Så när startprocessen är klar kan du ansluta till PostgreSQL med TCP-anslutningar och därmed gå in i behållaren och köra psql -h localhost
lyckas.