我正在使用以下命令运行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连接?
2条答案
按热度按时间xuo3flqw1#
当然,我已经将‘localhost’更改为‘db’,因为我正在尝试连接该容器。
不,您不需要,您的dockerfile正在向主机公开端口5432,如标志
-p 5432:5432
所示因此,如果您尝试从主机连接到扩展坞,yoi将使用主机
localhost
我认为,当我们有多个Docker试图彼此通信时,您会混淆Docker和Docker网络之间的关系,就像Docker-Compose的情况一样。
在docker-compose的情况下,当您有多个服务在运行时,它们可以使用docker容器名称作为主机相互通信。与此类似,如果码头容器之间有网络,则它们可以使用码头名称作为主机进行相互通信
因此,如果它是docker-compose,并且docker在一个容器上运行,而您的应用程序在另一个容器中运行,那么在这种情况下,您将使用db替换本地主机。
希望这能澄清一些事情
wh6knrhe2#
如果您的Python程序运行在Docker主机上,那么您当然不会想要在您的连接字符串中将
localhost
更改为db
,因为(A)Docker不会更改您的主机DNS设置(B)您正在使用-p
将端口5432上运行的服务更新为端口5432上的主机。您只能使用来自同一Docker网络中运行的另一个Docker容器的名称
db
。