首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法用psycopg2连接到停靠器postgress容器。

无法用psycopg2连接到停靠器postgress容器。
EN

Stack Overflow用户
提问于 2022-09-16 07:46:34
回答 2查看 40关注 0票数 1

我使用以下命令运行Postgres SQL数据库容器:

代码语言:javascript
运行
复制
docker run  --name db -p 5432:5432 -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -v pg

当然,我已经将“localhost”更改为“db”,因为我试图连接这个容器。当我试图连接到容器数据库时,我会得到以下错误:

代码语言:javascript
运行
复制
psycopg2.OperationalError: could not translate host name "db" to address: Name or service not known

我不能在这个上下文中使用(我知道如何运行它)。我还需要在我的docker命令中添加什么,以便可以从python连接?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-09-16 07:57:26

当然,

已经将“localhost”更改为“db”,因为我试图连接这个容器。

不,您没有,您的dockerfile正在向主机公开端口5432,这是由标志-p 5432:5432声明的

因此,如果您试图从主机连接到对接器,yoi将使用主机localhost

我认为当我们有多个对接者试图相互沟通时,你会混淆对接者和码头者之间的网络联系,就像对接者撰写的情况一样。

当您有多个服务运行时,当您使用docker容器名称作为主机时,它们可以相互通信。类似地,如果您在码头容器之间有一个网络,它们可以使用码头名称作为主机进行通信。

因此,如果是docker-compose,在一个容器上运行对接器,在另一个容器中运行您的应用程序,那么您将用db替换localhost。

希望能澄清一切

票数 2
EN

Stack Overflow用户

发布于 2022-09-16 07:51:36

如果您的Python程序在Docker主机上运行,那么不希望在连接字符串中“当然”将localhost更改为db,因为(a) Docker不更改主机DNS设置(b)您使用-p将运行在端口5432上的服务变为端口5432上的主机。

您将只使用在同一Docker网络中运行的另一个Docker容器中的名称db

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73741546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档