无法通过SQLAlchemy连接Docker中的PostgreSQL服务器
问题分析与解决
核心问题:端口映射不匹配
PostgreSQL官方镜像默认监听5432端口,但你的Docker命令将主机5101端口映射到了容器5101端口——容器内的Postgres根本没在这个端口提供服务,这是连接被拒绝的主要原因。
分步解决方案:
1. 修正Docker端口映射
修改docker run命令,将容器内部端口改为Postgres默认的5432:
docker run --name rule-creator-dat -e POSTGRES_USER=admin -e POSTGRES_PASSWORD=secret -p 10.10.50.8:5101:5432 -v /data:/var/lib/postgresql/data -d postgres
格式说明:
-p 主机IP:主机端口:容器端口,容器端口必须对应Postgres实际监听的端口(默认5432)。
2. 修正数据库连接字符串
确保连接参数与Docker环境变量一致:
- 用户名替换为
POSTGRES_USER设置的admin - 默认数据库名为
postgres(未指定POSTGRES_DB环境变量时) - 主机、端口使用映射后的服务器IP和5101端口
修正后的代码:
engine = create_engine('postgres+psycopg2://admin:secret@10.10.50.8:5101/postgres')
3. 可选:验证Postgres远程连接配置
如果修正端口后仍无法连接,检查容器内Postgres是否允许远程访问:
- 进入容器:
docker exec -it rule-creator-dat bash - 编辑
/var/lib/postgresql/data/postgresql.conf,确保listen_addresses = '*' - 编辑
/var/lib/postgresql/data/pg_hba.conf,添加行:host all all 0.0.0.0/0 md5 - 重启容器:
docker restart rule-creator-dat
额外排查点
- 检查服务器防火墙是否开放5101端口,允许目标IP访问
- 用
telnet 10.10.50.8 5101或nc -zv 10.10.50.8 5101测试端口是否可达
内容的提问来源于stack exchange,提问作者wondergrandma
相关产品推荐
相关产品推荐

