从本地机器上的 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 的 table 并将一些随机数据插入到几行中。
我现在正尝试通过我本地计算机上 Python 中的 psycopg2 连接到此数据库 table。
我使用命令 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: could not connect to server: Connection refused (0x0000274D/10061)"
的错误消息
。
.
一切似乎都井井有条,所以我不明白为什么会被拒绝。
根据此 postgres 映像的文档,(位于 https://hub.docker.com/_/postgres/)此映像包含 EXPOSE 5432(postgres 端口),默认用户名是 postgres。
我还尝试用 docker inspect test-db | grep IPAddress | awk 'print{}' | tr -d '",'
获取图像本身的 IP 地址,我在 SA 上找到了一篇稍微相关的文章,但该 IP 地址也不起作用。
EXPOSE
指令可能没有按照您的预期执行。它用于 Docker 网络内部的链接和 inter-container 通信。从 Docker 桥接网络外部连接到容器时,您需要使用 -p
发布到端口。尝试将 -p 5432:5432
添加到您的 docker run
命令中,使其看起来像:
docker run --name test-db -e POSTGRES_PASSWORD=my_secret_password -d -p 5432:5432 postgres
下面是对发布端口和公开端口之间差异的体面解释:。希望这对您有所帮助!
我使用以下命令创建了一个带有 Postgres 运行 的 Docker 图像:
docker pull postgres
docker run --name test-db -e POSTGRES_PASSWORD=my_secret_password -d postgres
然后我创建了一个名为 test 的 table 并将一些随机数据插入到几行中。
我现在正尝试通过我本地计算机上 Python 中的 psycopg2 连接到此数据库 table。
我使用命令 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: could not connect to server: Connection refused (0x0000274D/10061)"
的错误消息。 .
一切似乎都井井有条,所以我不明白为什么会被拒绝。 根据此 postgres 映像的文档,(位于 https://hub.docker.com/_/postgres/)此映像包含 EXPOSE 5432(postgres 端口),默认用户名是 postgres。
我还尝试用 docker inspect test-db | grep IPAddress | awk 'print{}' | tr -d '",'
获取图像本身的 IP 地址,我在 SA 上找到了一篇稍微相关的文章,但该 IP 地址也不起作用。
EXPOSE
指令可能没有按照您的预期执行。它用于 Docker 网络内部的链接和 inter-container 通信。从 Docker 桥接网络外部连接到容器时,您需要使用 -p
发布到端口。尝试将 -p 5432:5432
添加到您的 docker run
命令中,使其看起来像:
docker run --name test-db -e POSTGRES_PASSWORD=my_secret_password -d -p 5432:5432 postgres
下面是对发布端口和公开端口之间差异的体面解释:。希望这对您有所帮助!