Sepertinya komit ini 9"> telah merusak skrip Anda.
Penjelasan:
PostgreSQL dapat menerima koneksi tidak hanya melalui TCP/IP, tetapi juga melalui soket UNIX. -h localhost
argumen memberitahu psql
untuk menggunakan koneksi TCP daripada soket UNIX.
Jika Anda melihat docker-entrypoint.sh saat ini
versi, Anda akan melihat, bahwa selama eksekusi skrip di /docker-entrypoint-initdb.d
PostgreSQL hanya mendengarkan pada soket UNIX, dan log startup mengatakan:
LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
Artinya psql -h localhost
tidak akan terhubung ke database, karena PostgreSQL tidak mendengarkan pada soket IP. Anda harus menggunakan psql
tanpa -h localhost
opsi untuk membuatnya menggunakan soket UNIX alih-alih koneksi TCP.
Tapi mengapa menjalankan psql -h localhost
bekerja secara manual?
Jika Anda melihat ke docker-entrypoint.sh
lagi, Anda akan melihat bahwa ketika semua skrip init dijalankan, PostgreSQL sedang berhenti
lalu dimulai
lagi dalam mode normal (operasional), di mana ia mendengarkan pada soket UNIX dan 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"
Jadi, ketika proses startup selesai, Anda dapat terhubung ke PostgreSQL menggunakan koneksi TCP, dengan demikian, masuk ke dalam wadah dan menjalankan psql -h localhost
berhasil.