无法与停靠站后置SQL容器连接,原因为%2

72qzrwbm  于 2022-09-19  发布在  Docker
关注(0)|答案(2)|浏览(157)

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

docker run  --name db -p 5432:5432 -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -v pg

当然,我已经将‘localhost’更改为‘db’,因为我正在尝试连接该容器。当我尝试连接到容器数据库时,我得到以下错误:

psycopg2.OperationalError: could not translate host name "db" to address: Name or service not known

我不能在这种情况下使用这里的Docker Compose(虽然我知道如何运行它)。我还需要在我的docker命令中添加什么,才能从python连接?

xuo3flqw

xuo3flqw1#

当然,我已经将‘localhost’更改为‘db’,因为我正在尝试连接该容器。

不,您不需要,您的dockerfile正在向主机公开端口5432,如标志-p 5432:5432所示

因此,如果您尝试从主机连接到扩展坞,yoi将使用主机localhost

我认为,当我们有多个Docker试图彼此通信时,您会混淆Docker和Docker网络之间的关系,就像Docker-Compose的情况一样。

在docker-compose的情况下,当您有多个服务在运行时,它们可以使用docker容器名称作为主机相互通信。与此类似,如果码头容器之间有网络,则它们可以使用码头名称作为主机进行相互通信

因此,如果它是docker-compose,并且docker在一个容器上运行,而您的应用程序在另一个容器中运行,那么在这种情况下,您将使用db替换本地主机。

希望这能澄清一些事情

wh6knrhe

wh6knrhe2#

如果您的Python程序运行在Docker主机上,那么您当然不会想要在您的连接字符串中将localhost更改为db,因为(A)Docker不会更改您的主机DNS设置(B)您正在使用-p将端口5432上运行的服务更新为端口5432上的主机。

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

相关问题