我创建了一个docker容器。此数据库容器已成功运行。我可以连接到此容器并查看数据库的所有详细信息。这是一些配置:
services:
db:
container_name: db
image: postgres:latest
ports:
- "5432:5432"
environment:
POSTGRES_USER: abc
POSTGRES_PASSWORD: abc
POSTGRES_DB: database_dev
PGDATA: /var/lib/postgresql/data/pgdata
volumes:
- postres_volume:/var/lib/postgresql/data/
以下是我从这个正在运行的容器中检查的信息:
"NetworkSettings": {
"Bridge": "",
"Ports": {
"5432/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "5432"
}
]
},
"Networks": {
"medusa_default": {
"IPAMConfig": null,
"Links": null,
"Aliases": [
"74f7f48596e3",
"db"
],
"NetworkID": "d48bbf5453a7c42facda69a8c2c741a20bc18d35238854c00f068bd19119afc4",
"EndpointID": "5587658ae084eba71e65fb4712bc75a0ea7c240b600d77d4b4722f5a91818d73",
"Gateway": "172.19.0.1",
"IPAddress": "172.19.0.5",
"IPPrefixLen": 16,
"IPv6Gateway": "",
}
}
根据这些信息,我尝试了一些postgres客户端,如PgAdmin4或Adminer,并使用这些信息:
host: 172.19.0.5 (get from inspect)
port: 5432 (get from inspect)
user name: abc (get from docker-compose config)
password: abc (get from docker-compose config)
database name: abc_dev (get from docker-compose config)
但是所有客户都无法连接。我不知道这里有什么不对?请告诉我。
答案 0 :(得分:1)
您从inspect
获得的IP地址是Docker内部网络中的地址,而不是您可以从容器外部看到的地址。
由于您正在公开撰写文件中的端口(5432:5432
下的ports
设置),您只需连接到主机上的端口5432
,Docker正在运行容器。如果您尝试从主机Docker启用连接,localhost:5432
将起作用。