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

如何从另一运行中的Docker容器连接PostgreSQL容器

问题解决方法

核心错误原因

你的连接配置中host参数填写错误:my_network是你自定义的Docker桥接网络名称,并不是PostgreSQL容器的可解析主机名。Docker Compose会自动为同一网络下的服务做内部DNS解析,容器之间互相访问时直接使用docker-compose.yml中定义的服务名作为主机名即可。

修复方案

将你Python代码中的连接参数host从my_network修改为PostgreSQL对应的服务名db即可,其余参数保持不变,修改后代码如下:

import psycopg2

params = dict(host='db', database='spotify', user='postgres', password='mypassword', port='5432')
conn = psycopg2.connect(**params)

原理解释

  • 本地运行代码时可以用localhost连接的原因:你在db服务配置中做了端口映射5432:5432,将容器内的5432端口暴露到了宿主机的5432端口,所以本地请求localhost:5432会被转发到PostgreSQL容器。
  • 容器之间跨容器访问不走宿主机端口映射,直接通过Docker内部网络通信,Docker内置的DNS服务会直接把服务名解析为对应容器的内部IP,因此用服务名db才能正常解析。

可选验证步骤

你可以进入data_collection容器的shell,执行以下命令验证网络连通性:

  • 执行ping db,可以正常收到响应说明服务名解析正常
  • 执行nc -zv db 5432,返回连接成功说明数据库端口可正常访问

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:15:05