【问题标题】:Can't connect to postgres db from pgadmin (both running on docker)?无法从 pgadmin 连接到 postgres db(都在 docker 上运行)?
【发布时间】:2019-03-20 16:08:58
【问题描述】:

我在 fedora 28 操作系统上使用docker-compose up 在 docker 上运行 postgres 和 pgadmin4,我无法从 pgadmin 的 Web 控制台创建新的数据库服务器。 这是我正在使用的docker-compose.yml 文件。

version: '3.0'

services:
  db:
    image: postgres:9.6
    ports:
      - 5432:5432/tcp
    environment:
      - POSTGRES_USER=admin
      - POSTGRES_PASSWORD=admin
      - POSTGRES_DB=mydb

  pgadmin:
    image: dpage/pgadmin4
    ports:
      - 5454:5454/tcp
    environment:
      - PGADMIN_DEFAULT_EMAIL=admin@mydomain.com
      - PGADMIN_DEFAULT_PASSWORD=postgres
      - PGADMIN_LISTEN_PORT=5454

我应该在Create new server > 连接选项卡>“主机名/地址”字段中写什么?如果我输入 localhost 或 127.0.0.1 我会收到错误消息(无法连接,请参阅 screenshot1 和 screenshot2)。如果我输入 db(yml 文件中指定的服务名称),那么只有 pgadmin 接受它并创建一个带有名为 mydb 的 postgres 数据库的 db 服务器。

为什么?如何找到地址字段中的 ip?

此外,在 Fedora28 上:

$ netstat -napt | grep LIST
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:3350          0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:3389            0.0.0.0:*               LISTEN      -                   
tcp6       0      0 :::5454                 :::*                    LISTEN      -                   
tcp6       0      0 ::1:631                 :::*                    LISTEN      -                   
tcp6       0      0 :::5432                 :::*                    LISTEN      -                   
$

【问题讨论】:

    标签: postgresql server configuration docker-compose pgadmin


    【解决方案1】:

    我最近也遇到了这个问题。我找到了两种方法:

    1)See here。基本上,您只需搜索 postgres 容器的 IP 地址并在 pgadmin4 中使用该 IP 地址:

    $ docker ps
    CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS                    PORTS                           NAMES
    194d4a5f9dd0        dpage/pgadmin4             "/entrypoint.sh"         48 minutes ago      Up 48 minutes             443/tcp, 0.0.0.0:8080->80/tcp   docker-postgis_pgadmin_1
    334d5bdc87f7        kartoza/postgis:11.0-2.5   "/bin/sh -c /docke..."   48 minutes ago      Up 48 minutes (healthy)   0.0.0.0:5432->5432/tcp          docker-postgis_db_1
    
    

    在我的例子中,postgres 容器 ID 是 334d5bdc87f7。然后查找IP地址:

    $ docker inspect 334d5bdc87f7 | grep IPAddress
                "SecondaryIPAddresses": null,
                "IPAddress": "",
                        "IPAddress": "172.18.0.2",
    

    当我在pgadmin4中使用172.18.0.2时,我连接到了数据库!耶!

    2) 第二种方法更容易。我没有使用localhost 或127.0.0.1 或::1,而是在本地网络中使用了我的IP 地址(例如在你的情况下为192.168.122.1?)。之后,我连接到 postgres 容器!

    【讨论】:

    • 第二个选项对我有用,第一个(我觉得更优雅)出于某种原因没有
    【解决方案2】:

    根据我对文档的阅读和自己的测试,您使用 docker-compose yml 文件中的数据库服务名称作为 pgAdmin 中的“主机名/地址”字段值是正确的。

    https://docs.docker.com/compose/networking/

    在您的“pgadmin”部分中,我会使用端口值 8080 或 80,为什么是 5454?

    【讨论】:

      猜你喜欢
      • 2016-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      • 2021-08-15
      • 2020-07-31
      • 1970-01-01
      相关资源
      最近更新 更多