Docker 正在与 Ubuntu 一起开发 WSL。我刚刚开始尝试使用数据库并遇到了一些困难。问题是我无法使用 Dbeaver 或 pgadmin 连接到 Docker 数据库。
docker-compose
文件:
docker-compose up
之后我得到了2个容器。第一个是我的数据库,第二个是管理。从“pagila”容器的“Inspect”文件中,我获得了 IP 地址,并尝试使用此 IP 地址在 Dbeaver 中连接到它。
从
netstat -ano
我得到这个端口在本地主机上“监听”。docker exec -it pagila psql -U postgres
从命令行连接到该容器。成功了。
也许我应该连接到
0.0.0.0
主机?但还有一个问题:
我尝试了不同的连接方式,但都不起作用。有人能帮我吗?也许有什么我不明白的地方。
如果我尝试连接本地主机,它将是本地服务器。但我想从 docker 获取 db...
在使用 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
,所以相应地调整。