Docker Postgresql 连接被拒绝
Docker Postgresql connection refused
我一直在尝试 docker 化我的网络应用程序,到目前为止(大部分)一切都很好!除了现在我正在尝试在 postgreql 中连接(抱歉,如果措辞不正确),因为应用程序连接到 psql 数据库以进行登录和存储。
我在 post here on SO 上读到,我需要通过将 ports: -"5432:5432"
添加到 docker-compose.yml 来将数据库映射到我的本地计算机。 (这里是参考问题)
但是现在每当我尝试执行任何需要数据库访问的操作时,我都会收到连接被拒绝的错误。
这里是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
在您使用的评论中
spring.datasource.url=jdbc:postgresql://localhost/droolsTestDB
连接到数据库。将其更改为
spring.datasource.url=jdbc:postgresql://db/droolsTestDB
即使不向主机公开端口 5432,它也应该可以工作。
背景:每个 docker 容器都有自己的网络接口,对应于该特定容器的 localhost
。因此,从容器内连接到 localhost
将不会连接到主机或其他容器。由于 docker-compose
提供自动 DNS 解析,因此很容易通过名称引用其他服务。
我一直在尝试 docker 化我的网络应用程序,到目前为止(大部分)一切都很好!除了现在我正在尝试在 postgreql 中连接(抱歉,如果措辞不正确),因为应用程序连接到 psql 数据库以进行登录和存储。
我在 post here on SO 上读到,我需要通过将 ports: -"5432:5432"
添加到 docker-compose.yml 来将数据库映射到我的本地计算机。 (这里是参考问题
但是现在每当我尝试执行任何需要数据库访问的操作时,我都会收到连接被拒绝的错误。
这里是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
在您使用的评论中
spring.datasource.url=jdbc:postgresql://localhost/droolsTestDB
连接到数据库。将其更改为
spring.datasource.url=jdbc:postgresql://db/droolsTestDB
即使不向主机公开端口 5432,它也应该可以工作。
背景:每个 docker 容器都有自己的网络接口,对应于该特定容器的 localhost
。因此,从容器内连接到 localhost
将不会连接到主机或其他容器。由于 docker-compose
提供自动 DNS 解析,因此很容易通过名称引用其他服务。