2016-03-31 6 views
1

Я немного потерял, почему мое приложение java не может подключиться к моей базе данных postgres. Я пытаюсь подключиться к базе данных postgres через jdbc. Приложение должно запускаться внутри контейнера докеров.Подключение к postgres из контейнера докера

this.connection = `DriverManager.getConnection("jdbc:postgresql://<myip>:5432/databasename", "usr", "password");` 

Я получаю исключение:

Connection refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections. 

При запуске приложения из моего рабочего стола, он соединяет, как и ожидалось. Когда я запускаю его из контейнера докера, он терпит неудачу.

Я только что установил докер сегодня днем ​​и прошел через начало работы для окон, поэтому мое состояние настройки сразу после запуска. Вот содержание моего Dockerfile:

FROM java:8 
ADD VaultServer/
EXPOSE 3971 
EXPOSE 3972 
ENTRYPOINT ["java", "-jar", "VaultServer.jar"] 
+0

Вы правильно настроили файл [pg_hba.conf] (http://www.postgresql.org/docs/9.1/static/auth-pg-hba-conf.html), чтобы принимать соединения из контейнера докера Айпи адрес? – dic19

+0

Думаю, что так. Это установка на моей локальной машине, которую я не модифицировал, поскольку она была первоначально создана процессом по умолчанию. Он просто имеет в нем следующее: # IPv4 локальные соединения: хост все все 127.0.0.1/32 md5 # IPv6 локальные соединения: хозяин все все :: 1/128 md5 – Andy

+0

кажется, что вы хотите подключиться установка PostgreSQL на хосте из приложения внутри контейнера Docker. Если это так, прочитайте здесь http://stackoverflow.com/questions/31249112/allow-docker-container-to-connect-to-a-local-host-postgres-database –

ответ

4

Внутри папки данных есть файл с именем pg_hba.conf вы должны настроить его, чтобы принять соединения. Таким образом, ваш файл pg_hba.conf должен иметь такую ​​строку host all all YourDockerip/24 md5.

После этого настройте файл postgresql.conf. Вы должны обновить listen_addresses всем и убедиться, что раскомментируете эту строку, удалив знак #. Таким образом, ваш listen_addresses должен выглядеть следующим образом: listen_addresses = '*'.

+0

Извините, я все еще получаю свою голову вокруг докеров. Вы имеете в виду ip для докерной машины или ip для контейнера? Если это последний; есть какой-то способ слушать любого/все из докеров, так как я намереваюсь в конечном итоге динамически вращать эти контейнеры вверх и вниз. – Andy

+1

Для прослушивания всех IP-адресов вы можете использовать '0.0.0.0/0'. Вы перезапустили сервер postgreSQL после настройки файлов? –

Смежные вопросы