Parece este commit quebrou seu script.
Explicação:
O PostgreSQL pode aceitar conexões não apenas via TCP/IP, mas também via socket UNIX. O
-h localhost
argumento diz ao psql
usar conexões TCP em vez do soquete UNIX. Se você olhar para o atual docker-entrypoint.sh versão, você verá que durante a execução de scripts em
/docker-entrypoint-initdb.d
O PostgreSQL escuta apenas no soquete UNIX e o log de inicialização diz:LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
Isso significa que
psql -h localhost
não se conectará ao banco de dados, pois o PostgreSQL não escuta no soquete IP. Você deve usar psql
sem -h localhost
opção para fazê-lo usar soquete UNIX em vez de conexões TCP. Mas por que executar
psql -h localhost
funciona manualmente? Se você olhar para o
docker-entrypoint.sh
novamente, você verá que quando todos os scripts de inicialização são executados, o PostgreSQL está sendo interrompido
e então iniciado
novamente no modo normal (operacional), no qual ele escuta nos soquetes UNIX e 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"
Assim, quando o processo de inicialização estiver completo, você pode se conectar ao PostgreSQL usando conexões TCP, entrando no container e executando
psql -h localhost
tem sucesso.