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.