Docker Postgresql连接被拒绝

时间:2018-11-19 18:10:40

标签: postgresql docker docker-compose iptables

我一直在尝试对我的Web应用程序进行docker化,到目前为止一切(大部分)进展顺利!除了现在,我正在尝试在postgreql中连接(如果语言表达不正确,很抱歉),因为该应用程序连接到psql DB进行登录和存储。

我在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 :(得分:2)

在您写的注释中使用

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

以连接到数据库。更改为

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

,即使没有将端口5432暴露给主机,它也应该可以工作。

背景:每个docker容器都有其自己的网络接口,该接口对应于该特定容器的localhost。因此,从容器内部连接到localhost不会连接到主机或其他容器。由于docker-compose提供了自动DNS解析功能,因此可以很容易地通过其他名称来引用其他服务。