【问题标题】:Connecting from psycopg2 on local machine to PostgreSQL db on Docker从本地机器上的 psycopg2 连接到 Docker 上的 PostgreSQL 数据库
【发布时间】:2016-04-27 02:14:03
【问题描述】:

我使用以下命令创建了一个运行 Postgres 的 Docker 映像:

docker pull postgres docker run --name test-db -e POSTGRES_PASSWORD=my_secret_password -d postgres

然后我创建了一个名为 test 的表并将一些随机数据插入到几行中。 我现在正试图在我的本地机器上通过 Python 中的 psycopg2 连接到这个数据库表。 我使用命令docker-machine ip default 找出机器的IP 地址为192.168.99.100,并使用以下命令尝试连接:

conn = psycopg2.connect("dbname='test-db' user='postgres' host='192.168.99.100' password='my_secret_password' port='5432'")

这不适用于“OperationalError:无法连接到服务器:连接被拒绝(0x0000274D/10061)”的错误消息

。 .

一切似乎都井井有条,所以我想不出为什么会被拒绝。 根据此 postgres 图像的文档,(https://hub.docker.com/_/postgres/)此图像包括 EXPOSE 5432(postgres 端口),默认用户名是 postgres。

我还尝试使用我在 SA 上找到的一篇稍微相关的文章中的 docker inspect test-db | grep IPAddress | awk 'print{$2}' | tr -d '",' 获取图像本身的 IP 地址,但该 IP 地址也不起作用。

【问题讨论】:

  • 您是否尝试过连接其他客户端,例如psql

标签: python postgresql docker psycopg2


【解决方案1】:

EXPOSE 指令可能没有达到您的预期。它用于 Docker 网络内的链接和容器间通信。从 Docker 桥接网络外部连接到容器时,您需要使用-p 发布到端口。尝试将-p 5432:5432 添加到您的docker run 命令中,使其看起来像:

docker run --name test-db -e POSTGRES_PASSWORD=my_secret_password -d -p 5432:5432 postgres

这里是发布端口和公开端口之间差异的一个很好的解释:https://stackoverflow.com/a/22150099/684908。希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-08
    • 2020-10-05
    • 2019-05-28
    • 1970-01-01
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    相关资源
    最近更新 更多