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

使用psycopg2无法连接Docker PostgreSQL容器的配置咨询

问题解决:psycopg2无法解析Docker容器名"db"

核心原因

你遇到的域名解析错误,本质是容器名仅在同一个Docker自定义网络内才会被DNS解析:

  • 若Python代码在宿主机运行:宿主机DNS系统不知道Docker容器名"db",无法完成解析
  • 若Python代码在另一个Docker容器运行:默认Docker bridge网络不支持容器名解析,必须使用自定义网络

分场景解决方案

场景1:Python代码在宿主机运行

无需修改docker run命令,直接将psycopg2的连接地址改回localhost或127.0.0.1即可(你已通过-p 5432:5432将容器端口映射到宿主机)。

如果非要用"db"作为连接主机名,可手动修改宿主机的/etc/hosts文件,添加一行:

127.0.0.1 db

此操作不属于Docker配置,仅作为补充方案。

场景2:Python代码在另一个Docker容器运行

需要给PostgreSQL容器加入自定义Docker网络,步骤如下:

  1. 先创建自定义网络:
docker network create pg-network
  1. 修改PostgreSQL的docker run命令,加入网络配置(同时修复你原命令中不完整的卷挂载参数):
docker run --name db -p 5432:5432 -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -v pg-data:/var/lib/postgresql/data --network pg-network postgres

注:你原命令中的-v pg参数不完整,必须指定卷名和容器内的PostgreSQL数据路径(/var/lib/postgresql/data),否则容器启动会失败。

  1. 启动Python容器时,同样加入该网络:
docker run --name python-app --network pg-network your-python-image

此时Python容器内的psycopg2就能用db作为主机名正常连接PostgreSQL了。


内容的提问来源于stack exchange,提问作者AnonymousScientificUser

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 11:30:58