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

问题描述 投票:0回答:1

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

docker-compose
文件:

docker-compose up
之后我得到了2个容器。第一个是我的数据库,第二个是管理。从“pagila”容器的“Inspect”文件中,我获得了 IP 地址,并尝试使用此 IP 地址在 Dbeaver 中连接到它。


但结果我得到了“超出时间限制”。

netstat -ano
我得到这个端口在本地主机上“监听”。

从 PID 任务管理器我得到了这个

我可以使用
docker exec -it pagila psql -U postgres
从命令行连接到该容器。成功了。

也许我应该连接到

0.0.0.0
主机?但还有一个问题:

我尝试了不同的连接方式,但都不起作用。有人能帮我吗?也许有什么我不明白的地方。

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

postgresql docker docker-compose localhost dbeaver
1个回答
0
投票

在使用 Docker 容器时,尤其是使用

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

因此,要使用DBeaver连接数据库,您需要使用

localhost
主机名或环回IP(
127.0.0.1
),并访问暴露的端口(
6543
)。因此,在 DBeaver 中,您需要使用
host=localhost
port=6543

关于您的密码,由于您在

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

密码的另一种可能性是,由于您使用

pgdata:/var/lib/postgresql/data
进行呼叫,因此可能存在带有预定义密码的预先存在的数据库。我不是100%确定,但是如果有一个预先存在的数据库,
initdb
不会被调用,因此密码不会被设置为
1313
,所以相应地调整。

© www.soinside.com 2019 - 2024. All rights reserved.