Как подключиться к postgres с помощью psql (-h localhost -p 5432) при запуске контейнера Docker - PullRequest
0 голосов
/ 30 мая 2018

У меня есть файл 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, когда контейнер запускается, но если подключиться вручную из контейнера, он успешно подключится?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

попробуйте добавить команду сна в ваш скрипт, чтобы дать правильное время вашей базе данных для правильного запуска.

0 голосов
/ 31 мая 2018

Насколько я понимаю, во время инициализации контейнера сервер прослушивает сокет Unix-домена.

LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"

Сценарии в каталоге docker-entrypoint-init.d выполняются, пока сервер работает в этом режиме.Вы пытаетесь подключиться через TCP / IP, указав -h localhost.Попробуйте удалить этот аргумент для подключения к серверу с помощью сокетов Unix.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...