从本地机器上的psycopg2连接到Docker上的PostgreSQL数据库
我已经使用下面的命令来创build一个运行Postgres的Docker镜像:
docker pull postgres docker run --name test-db -e POSTGRES_PASSWORD=my_secret_password -d postgres
然后我创build了一个名为test的表,并将一些随机数据插入到几行中。 我现在试图在本地机器上通过Python中的psycopg2连接到这个数据库表。 我使用命令docker-machine ip default
查找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地址 docker inspect test-db | grep IPAddress | awk 'print{$2}' | tr -d '",'
docker inspect test-db | grep IPAddress | awk 'print{$2}' | tr -d '",'
我在SA上find一个稍微相关的文章,但是这个IP地址也不起作用。
EXPOSE
指令可能不会达到您所期望的。 它用于Dockernetworking内的链接和容器间通信。 从Docker桥接networking外部连接到容器时,需要使用-p
发布到端口。 尝试在您的docker run
命令中添加-p 5432:5432
,使其看起来像:
docker run --name test-db -e POSTGRES_PASSWORD=my_secret_password -d -p 5432:5432 postgres
下面是发布和公开端口之间差异的一个体面的解释: https : //stackoverflow.com/a/22150099/684908 。 希望这可以帮助!