【发布时间】:2018-11-19 18:10:40
【问题描述】:
我一直在尝试 dockerize 我的网络应用程序,到目前为止一切都(大部分)顺利!除了现在我正在尝试在 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
【问题讨论】:
-
应用中使用的数据库连接是什么?通常不需要将端口 5432 暴露给主机。而是连接到主机
db上的端口 5432。 -
我用jdbc连接
spring.datasource.url=jdbc:postgresql://localhost/droolsTestDB,postgres作为用户和密码
标签: postgresql docker docker-compose iptables