Docker Postgresql отказал в соединении - PullRequest
0 голосов
/ 19 ноября 2018

Я пытался докернизировать свое веб-приложение, и пока все прошло (в основном) хорошо! За исключением того, что сейчас я пытаюсь подключиться (извините, если неверный текст) в postgreql, так как приложение подключается к базе данных psql для входа в систему, а также для хранения вещей.

Я прочитал в посте на SO, что мне нужно просто сопоставить БД с моей локальной машиной, добавив ports: -"5432:5432" в docker-compose.yml. (здесь упоминается вопрос Docker Compose + Postgres: Expose port )

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

Вот docker-compose.yml

version: '3.1'

services:
  drools-average-docker-app:
    image: drools-average-docker-image
    build:
        context: ./
        dockerfile: Dockerfile
    ports:
        - 8080:8080
  db:
    image: postgres:11-alpine
    environment:
      POSTGRES_DB: 'droolsTestDB'
      POSTGRES_USER: 'postgres'
      POSTGRES_PASSWORD: 'postgres'
    ports:
        - "5432:5432"

Я тоже где-то читал, что это может быть iptables блокировка соединения? Так что на всякий случай, вот iptables.rules

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [8:411]
:TCP - [0:0]
:UDP - [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
COMMIT

1 Ответ

0 голосов
/ 19 ноября 2018

В комментариях вы пишете, что вы используете

spring.datasource.url=jdbc:postgresql://localhost/droolsTestDB

для подключения к БД.Измените это значение на

spring.datasource.url=jdbc:postgresql://db/droolsTestDB

, и оно должно работать даже без предоставления хосту порта 5432.

Справочная информация: каждый контейнер док-станции имеет свой собственный сетевой интерфейс, который соответствует localhost для этого конкретногоконтейнер.Следовательно, подключение к localhost из контейнера не приведет к подключению к хосту или другому контейнеру.Поскольку docker-compose предлагает автоматическое разрешение DNS, вместо этого легко ссылаться на другие службы по их именам.

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