Det ser ud som om docker-entrypoint.sh#L111">docker-entrypoint.sh#L111">
version, vil du se, at under udførelsen af scripts i /docker-entrypoint-initdb.d
PostgreSQL lytter kun på UNIX-socket, og opstartsloggen siger:
LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
Det betyder, at psql -h localhost
vil ikke oprette forbindelse til databasen, da PostgreSQL ikke lytter på IP-socket. Du skal bruge psql
uden -h localhost
mulighed for at få den til at bruge UNIX-socket i stedet for TCP-forbindelser.
Men hvorfor køre psql -h localhost
virker manuelt?
Hvis du ser på docker-entrypoint.sh
igen, du vil se, at når alle init-scripts er udført, bliver PostgreSQL stoppet
og derefter startede
igen i normal (operativ) tilstand, hvor den lytter både på UNIX- og 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 opstartsprocessen er fuldført, kan du oprette forbindelse til PostgreSQL ved hjælp af TCP-forbindelser, og dermed gå ind i containeren og køre psql -h localhost
lykkes.