You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 04:12:10