从本地计算机上的psycopg2连接到Docker

时间:2016-01-21 00:48:57

标签: python postgresql docker psycopg2

我使用以下命令创建了一个运行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。

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

1 个答案:

答案 0 :(得分:5)

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。希望这有帮助!