У меня есть файл docker-compose.yml.В этом файле определена служба db (postgres: 9.6):
db:
image: postgres:9.6
volumes:
- ./test/data/postgresql/:/var/lib/postgresql/data:delegated
- ./test/bootstrap/postgres:/docker-entrypoint-initdb.d:delegated
ports:
- 15432:5432
environment:
- POSTGRES_DB=test
- POSTGRES_USER=test
- PGDATA=/var/lib/postgresql/data/testdata
и некоторый скрипт sh, расположенный в . / Test / bootstrap / postgres .В этом сценарии я пытаюсь подключиться к postgres с помощью psql следующим образом: psql -U "$ POSTGRES_USER" -d "$ POSTGRES_DB" -h localhost -p 5432 (я знаю, что -h localhost -p 5432 - этоне обязательно, но мне это нужно).
Когда мой контейнер работает, произошла ошибка:
psql: could not connect to server: Connection refused
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?
Но после этого я перезапускаю (после первого запуска этот скрипт не выполняется) мой контейнер БД, затем внутри контейнера вручнуюзапустить скрипт sh и он успешно выполнен.Он может подключаться к локальному хосту и порту 5432, даже если он запускается впервые.
Если я подключаюсь по сценарию, то psql -U "$ POSTGRES_USER" -d "$ POSTGRES_DB" не вызывает ошибки подключения.
Может кто-нибудь объяснить мне это странное поведение?Почему я не могу подключиться к localhost: 5432, когда контейнер запускается, но если подключиться вручную из контейнера, он успешно подключится?
Спасибо!