关于python:从本地机器上的psycopg2连接到Docker上的PostgreSQL数据库

Connecting from psycopg2 on local machine to PostgreSQL db on Docker

我使用以下命令创建了一个运行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,并使用以下方法尝试连接:

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

这不适用于"operationalerror:could not connect to server:connection rejected(0x000274D/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地址也不起作用。


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

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

下面是一个关于发布端口和公开端口之间差异的合理解释:https://stackoverflow.com/a/22150099/684908。希望这有帮助!