无法从pgadmin连接到postgres数据库(都在docker上运行)?

问题描述 投票:2回答:2

我在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:
      - [email protected]
      - PGADMIN_DEFAULT_PASSWORD=postgres
      - PGADMIN_LISTEN_PORT=5454

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

为什么?如何找到地址字段中的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
2个回答
0
投票

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

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

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


0
投票

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

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时,我连接到了数据库! Yey!

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

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