Docker部署PostgreSQL远程连接被拒问题求助
问题根源与解决方案
从你提供的宿主机netstat输出可以明确问题所在:
root@VM01:~# netstat -na | grep 5432 tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN
宿主机的5432端口仅绑定在本地回环地址(127.0.0.1),意味着只有宿主机自身能访问这个端口,外部请求无法穿透到容器内的PostgreSQL服务。这是因为你启动Docker容器时,端口映射没有指定绑定到宿主机的所有网卡地址。
解决步骤
1. 停止当前PostgreSQL容器
docker stop postgres
2. 重新启动容器并修正端口映射
启动容器时,显式指定端口映射为0.0.0.0:5432:5432,让宿主机的所有网卡都监听5432端口并转发到容器:
docker run -d --name postgres -p 0.0.0.0:5432:5432 \ -e POSTGRES_PASSWORD=<你的密码> \ -v <你的数据卷路径>:/var/lib/postgresql/data \ postgres:latest
注意:替换命令中的
<你的密码>和<你的数据卷路径>为实际配置,保留你原本使用的其他启动参数。
3. 验证端口绑定
在宿主机再次执行netstat -na | grep 5432,正常输出应该是:
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN tcp6 0 0 :::5432 :::* LISTEN
4. 测试远程连接
此时再执行远程连接命令即可正常访问:
psql -h 20.XXX.1XX.1XX -p 5432 -U <user>
若使用Docker Compose的情况
修改docker-compose.yml中的ports配置:
services: postgres: image: postgres:latest ports: - "0.0.0.0:5432:5432" # 关键修改:绑定所有网卡 environment: POSTGRES_PASSWORD: <你的密码> volumes: - <你的数据卷路径>:/var/lib/postgresql/data
然后重启服务:
docker-compose down && docker-compose up -d
内容的提问来源于stack exchange,提问作者Scouse_Bob
相关产品推荐
相关产品推荐

