使用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网络,步骤如下:
- 先创建自定义网络:
docker network create pg-network
- 修改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),否则容器启动会失败。
- 启动Python容器时,同样加入该网络:
docker run --name python-app --network pg-network your-python-image
此时Python容器内的psycopg2就能用db作为主机名正常连接PostgreSQL了。
内容的提问来源于stack exchange,提问作者AnonymousScientificUser
相关产品推荐
相关产品推荐

