Docker:无法使用postgres客户端连接到数据库容器

时间:2017-03-12 19:25:58

标签: postgresql docker docker-compose

我创建了一个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)

但是所有客户都无法连接。我不知道这里有什么不对?请告诉我。

1 个答案:

答案 0 :(得分:1)

您从inspect获得的IP地址是Docker内部网络中的地址,而不是您可以从容器外部看到的地址。

由于您正在公开撰写文件中的端口(5432:5432下的ports设置),您只需连接到主机上的端口5432,Docker正在运行容器。如果您尝试从主机Docker启用连接,localhost:5432将起作用。