Docker-Postgres和pgAdmin 4:连接被拒绝

时间:2018-12-04 10:05:56

标签: postgresql docker

与docker的新手,我试图通过pgAdmin容器的本地主机连接到postgres容器。

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                         NAMES
0b00555238ba        dpage/pgadmin4      "/entrypoint.sh"         43 minutes ago      Up 43 minutes       0.0.0.0:80->80/tcp, 443/tcp   pedantic_turing
e79fb6440a95        postgres            "docker-entrypoint.s…"   About an hour ago   Up About an hour    0.0.0.0:5432->5432/tcp        pg-docker

我成功连接了psql命令。

psql -h localhost -U postgres -d postgres

但是当我在pgAdmin上使用与psql相同的参数创建服务器时,出现以下错误。

  

无法连接到服务器:

     

无法连接到服务器:连接被拒绝服务器正在运行   在主机“ localhost”(127.0.0.1)上并接受TCP / IP连接   端口5432?无法连接到服务器:地址不可用   服务器在主机“ localhost”(:: 1)上运行并接受TCP / IP   端口5432上是否有连接?

我成功连接了docker inspect容器上的IP地址。

顺便说一句,我检查了postgresql.conf并断言listen_addresses = '*'以及pg_hba.conf包含host all all all md5

但是我不明白,为什么我不能使用本地主机地址?为什么码头工人甚至给我一个非本地地址?

5 个答案:

答案 0 :(得分:8)

当您能够通过终端上的psql命令而不是pgAdmin4进行连接时,我也遇到了这种情况。 以下解决方案对我有用。

第一-

docker ps

从那里您将获得postgres容器的容器名称/ ID,然后执行-

docker inspect name_of_container_here

它会给你这样的东西-

 "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "f35dbe66b36cd38673aad6e1278ad33031ef9d5abd34582d4b91955e288f855e",
                    "EndpointID": "2e63ea59e9d0de7526bb02ba29bc0b16bcad51b8963127ad380416d15da994db",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
            }

记下IPAddress,并在pgAdmin4中创建新服务器时提供该IPAddress- enter image description here

答案 1 :(得分:2)

我遇到了同样的问题,并且以非规范的方式解决了该问题,但对我的本地工作流程非常满意。

我总是以docker-compose.yaml文件开始我的postgresql容器。所以我只是将pgAdmin添加到了相同的撰写文件中:

version: "3.7"
services:
  my_awesome_db:
    image: postgres:latest
    ports:
      - "5432:5432"
    container_name: postgresql-local
    volumes:
      - "/var/run/postgres.sock:/var/run/postgres/postgres.sock"
      - "/home/myuser/docker-apps/volumes/postgres-data:/var/lib/postgresql/data"
  pg_admin:
    image: dpage/pgadmin4:latest
    container_name: pgadmin4
    ports:
      - "15432:80"
    environment:
      - GUNICORN_THREADS=1
      - PGADMIN_DEFAULT_EMAIL=my_awesome_email@email.com
      - PGADMIN_DEFAULT_PASSWORD=does_not_matter
    depends_on:
      - my_awesome_db

因此,我在本地主机上访问pgAdmin:15432(只是因为它很容易记住),并且我已经用以下命令配置了pgAdmin:

Host: my_awesome_db
Port: 5432
Username: postgres

答案 2 :(得分:1)

对我来说,是这样的:

添加服务器->连接->主机名/地址

将字段设置为172.17.0.1

有关Docker网络文档的更多信息,请访问https://docs.docker.com/network/network-tutorial-standalone

答案 3 :(得分:0)

我不知道你是否还有问题。我想我已经找到了解决方法。

因此,我们注意到localhost不起作用,但是如果您在docker环境之外使用psql可以正常工作。但是这两个应用程序都在Docker中运行容器化,并且具有自己的网络配置。

如何发现?键入命令:docker network ls

某些网络将在控制台中列出,也许您会发现[name]_default应该是您的网络。

执行docker network [name]_default inspect会显示很多信息,对我们来说最重要的是IPv4Address,如下所示: "7c3cd7532ab8aacc70830afb74adad7296d9c8ddd725c498af2d7ee2d2c2aadd": { "Name": "intime_postegres_1", "EndpointID": "56a9cb574469f22259497b72719f9f4a3e555b09f95058fcf389ef5287381f28", "MacAddress": "02:42:ac:12:00:02", "IPv4Address": "172.18.0.2/16", "IPv6Address": "" }

在pgAdmin上,我连接到172.18.0.2:5432处的postgres实例。就像魅力一样。

答案 4 :(得分:0)

因为我要连接到软管上的服务器,所以就像添加一样简单

--net host

执行docker run命令,以便容器可以访问主机的端口。