在 Windows 上使用 Dbeaver 连接到 Docker 中的 Postgres

Connecting to Postgres in Docker using Dbeaver on Windows

提问人:denisiam 提问时间:11/8/2023 更新时间:11/8/2023 访问量:32

问:

Docker 正在使用 Ubuntu 发行版开发 WSL。我刚刚开始尝试使用数据库,遇到了一些困难。问题是我无法使用 Dbeaver 或 pgadmin 连接到 Docker 数据库。

docker-compose文件:

enter image description here

在我得到 2 个容器之后。首先是我的数据库,其次是管理员。从“pagila”容器的“检查”文件中,我得到了IP地址,并尝试使用此IP地址在Dbeaver中连接到它。docker-compose up

enter image description here
但结果我得到了“超过时间限制”。

从我得到的这个端口是本地主机上的“正在侦听”。
enter image description here
从 PID 的任务管理器中,我得到了这个,我可以使用命令行连接到这个
enter image description here
控制器。它是成功的。
netstat -anodocker exec -it pagila psql -U postgres

也许我应该在主机上连接?但还有其他问题:0.0.0.0

enter image description here

我尝试了不同的连接变体,但没有一个有效。有人可以帮我吗?也许有什么我不明白的地方。

如果我尝试在本地主机上连接,它将是本地服务器。但是我想从 docker 获取数据库......

PostgreSQL docker-compose localhost dbeaver

评论

0赞 richyen 11/8/2023
这回答了你的问题吗?如何从 Docker 容器内部连接到计算机的 localhost?
0赞 erik258 11/8/2023
我不认为这是骗局@richyen;他正在尝试连接到 6543 上公开的端口。我猜 172.23.0.3 是 postgresql 的 docker 端网络地址?如果这可行,您将需要使用 docker 内部的端口 5432,而不是转发到它的端口。 并不是一个有效的目标 IP,但它通常可以在 linux 中工作;在 Windows 中可能并非如此。尝试 127.0.0.1?0.0.0.0
1赞 richyen 11/8/2023
我可以发誓,我之前回答过这样的问题:(但是,是的,尝试和host=127.0.0.1port=6543
0赞 denisiam 11/8/2023
@richyen 是的!它现在正在工作,但奇怪的是。此示例数据库取自 pagila,最初用户密码为 123456。问题是我改变了它。不能使用其他密码连接到它。某处是否有可能进行密码验证/确认?
0赞 denisiam 11/8/2023
@richyen 我已连接 或 和 。但是我真的不知道密码有什么问题。感谢您思考@erik258host=localhosthost=127.0.0.1port=6543

答:

0赞 richyen 11/8/2023 #1

在使用 Docker 容器时,尤其是使用 时,请务必记住,设置一个虚拟网络,允许容器通过同一子网(在您的情况下)相互通信。主机无法访问此子网。相反,通过公开端口和映射端口(在本例中),Docker 允许访问该虚拟网络中的容器/服务。docker-composedocker-compose172.23.0.*6543:5432

因此,要使用 DBeaver 连接到数据库,需要使用主机名或环回 IP(),并访问暴露的端口 ()。因此,在 DBeaver 中,您需要使用 和localhost127.0.0.16543host=localhostport=6543

关于您的密码,由于您在文件中定义了密码,因此您应该能够使用 DBeaver 访问数据库。但是,请记住,此密码是在阶段(创建容器时)设置的。如果您的文件包含某种语句,您将覆盖密码。POSTGRES_PASSWORD=1313docker-compose.yml1313initdb1-pagila-schema.sqlALTER USER postgres WITH PASSWORD ...1313

密码的另一种可能性是,由于您使用 调用 ,因此可能存在一个具有预定义密码的预先存在的数据库。我不是 100% 确定,但如果有一个预先存在的数据库,则不会被调用,因此密码不会设置为 ,因此请相应地进行调整。pgdata:/var/lib/postgresql/datainitdb1313

评论

0赞 denisiam 11/8/2023
我认为它不是一个预先存在的数据库,也不是一个预定义的密码,因为我在没有清除任何东西的情况下更改了密码(也许 docker-compose down 删除了预先存在的数据库?到目前为止,我还没有在初始化脚本中发现任何类似的内容来为用户设置密码。感谢您的帮助!