Wygląda na to, że df63ff17 zepsuł twój skrypt.
Wyjaśnienie:
PostgreSQL może akceptować połączenia nie tylko przez TCP/IP, ale także przez gniazdo UNIX. -h localhost argument mówi psql używać połączeń TCP zamiast gniazda UNIX.
Jeśli zajrzysz do aktualnego docker-entrypoint.sh
wersji, zobaczysz, że podczas wykonywania skryptów w /docker-entrypoint-initdb.d PostgreSQL nasłuchuje tylko na gnieździe UNIX, a dziennik uruchamiania mówi:
LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
Oznacza to, że psql -h localhost nie połączy się z bazą danych, ponieważ PostgreSQL nie nasłuchuje na gnieździe IP. Musisz użyć psql bez -h localhost opcja, aby używać gniazda UNIX zamiast połączeń TCP.
Ale po co uruchamiać psql -h localhost? działa ręcznie?
Jeśli zajrzysz do docker-entrypoint.sh znowu zobaczysz, że po wykonaniu wszystkich skryptów startowych, PostgreSQL jest zatrzymał się
a następnie rozpoczęto
ponownie w trybie normalnym (operacyjnym), w którym nasłuchuje zarówno na gniazdach UNIX, jak i 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"
Tak więc, po zakończeniu procesu uruchamiania, możesz połączyć się z PostgreSQL za pomocą połączeń TCP, wchodząc do kontenera i uruchamiając psql -h localhost się powiedzie.