Il ressemble à ce commit a cassé votre script.
Explication :
PostgreSQL peut accepter des connexions non seulement via TCP/IP, mais aussi via socket UNIX. Le -h localhost
l'argument indique psql
pour utiliser les connexions TCP plutôt que le socket UNIX.
Si vous examinez le fichier docker-entrypoint.sh
version, vous verrez, que lors de l'exécution des scripts dans /docker-entrypoint-initdb.d
PostgreSQL n'écoute que sur le socket UNIX et le journal de démarrage indique :
LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
Cela signifie que psql -h localhost
ne se connectera pas à la base de données, car PostgreSQL n'écoute pas sur le socket IP. Vous devez utiliser psql
sans -h localhost
option pour lui faire utiliser le socket UNIX au lieu des connexions TCP.
Mais pourquoi exécuter psql -h localhost
fonctionne manuellement ?
Si vous regardez dans le fichier docker-entrypoint.sh
encore une fois, vous verrez que lorsque tous les scripts d'initialisation sont exécutés, PostgreSQL est arrêté
puis démarré
à nouveau en mode normal (opérationnel), dans lequel il écoute à la fois sur les sockets UNIX et 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"
Ainsi, lorsque le processus de démarrage est terminé, vous pouvez vous connecter à PostgreSQL à l'aide de connexions TCP, entrant ainsi dans le conteneur et exécutant psql -h localhost
réussit.