【问题标题】:docker pgAdmin4 connection refused while connecting local postgres database连接本地 postgres 数据库时,docker pgAdmin4 连接被拒绝
【发布时间】:2020-06-18 07:12:12
【问题描述】:

我正在尝试使用 pgAdmin4 docker 容器连接我的本地 postgres 数据库。当我在创建新的服务器连接后打开 http://localhost:5050/ 并登录时,我收到了 Unable to connect to server: could not connect to server: Connection refused 错误消息。

这是我的docker-compose.yml 文件

version: '3.5'

services:
  pgadmin:
    container_name: pgadmin4
    image: dpage/pgadmin4
    environment:
      PGADMIN_DEFAULT_EMAIL: db@db.com
      PGADMIN_DEFAULT_PASSWORD: odoo
    volumes:
       - pgadmin:/root/.pgadmin
    ports:
      - "5050:80"
    restart: unless-stopped

volumes:
    pgadmin:

我正在寻找将我的本地 postgres 数据库与 pgadmin4 docker 容器连接起来的解决方案。我正在使用 Ubuntu 20.04 操作系统。

---- 基于@Veikko 答案更新 -----------

这是我的 docker-compose 文件代码https://pastebin.com/VmhZwtaL

这里是 postgresql.conf 文件https://pastebin.com/R7ifFrGR

pg_hba.conf文件https://pastebin.com/yC2zCfBG

【问题讨论】:

  • 您的数据库在哪里运行,地址是什么? pgadmin 不包含 db 进程...
  • 数据库在本地 5432 端口运行。我想在 pgadmin4 中访问我的数据库。
  • 你在哪里运行数据库?在托管容器的机器上还是在另一个容器中?
  • 数据库在本地系统上运行

标签: postgresql docker ubuntu docker-compose pgadmin-4


【解决方案1】:

您可以使用 dns 名称 host.docker.internal 从 docker 容器访问您的主机。用此名称替换服务器连接中的 localhost。 pgAdmin 中的名称 localhost 指的是 docker 容器本身,而不是您的主机。

【讨论】:

  • 是的,但我仍然无法连接
  • 感谢您使用操作系统信息更新问题。 Ubuntu/linux 版本的 Docker 尚不支持 host.docker.internal。这适用于 Docker for Mac/Windows 版本 18.03。稍后我将发布一个与 linux 兼容的答案作为单独的答案。
【解决方案2】:

您可以使用图像qoomon/docker-host 访问主机上的服务。像这样将 docker-host 服务添加到您的 docker-compose 中:

version: '3.5'

services:
  docker-host:
      image: qoomon/docker-host
      cap_add: [ 'NET_ADMIN', 'NET_RAW' ]
      restart: on-failure
  pgadmin:
    container_name: pgadmin4
    image: dpage/pgadmin4
    environment:
...

在此之后,您应该能够使用主机名 docker-host 访问您的主机 Postgres 服务。将连接字符串中的localhost 替换为docker-host,连接应该可以正常工作。

如果在此之后连接出现问题,请确保您没有任何防火墙阻止流量,您有正确的 Docker 网络设置(请参阅文档)并且您的 postgresql 正在侦听此地址。

Ubuntu/linux 版本的 Docker 目前不支持将容器指向主机的 host.docker.internal DNS 名称。这是在 Docker for Mac 或 Windows 中链接到主机的最简单方法。我希望我们也能尽快把它带到 Linux 上。

更多关于 docker-host 的信息可以在 Github repo 中找到:https://github.com/qoomon/docker-host

【讨论】:

  • 嗨@Veikko 谢谢你的回答。我已经按照你的回答尝试了我得到了这个错误ibb.co/Kqq9X1T 以及这是我的 docker-compose 文件代码pastebin.com/VmhZwtaL 在这里我分享了我的 postgresql.conf 包含 pastebin.com/R7ifFrGR 和 pg_hba.conf 文件包含 pastebin.com/yC2zCfBG
  • 截屏中的 pgadmin 主机名是 dns 名称,仅适用于 win/mac ('host.docker.internal')。请在 pgadmin 字段“主机名/地址”中使用名称“docker-host”。指 docker-compose.yaml 中指定的 qoomon:docker-host 容器的服务名称。
  • 你能澄清一下我应该在主机名/地址字段中输入什么吗?
  • 在主机名/地址中使用“docker-host”。
  • 仍然无法连接到服务器:无法连接到服务器:连接被拒绝服务器是否在主机“docker-host”(172.29.0.2)上运行并接受端口 5432 上的 TCP/IP 连接?
【解决方案3】:

首先调用这个:sudo netstat -nplt 以确保有人在监听 5432 端口。
比打电话sudo ip addr 知道你的主机的IP。
比尝试使用真实 IP 而不是 localhost 连接。
我在您的ip addr 输出中看到:

3: wlp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 30:10:b3:e4:39:e2 brd ff:ff:ff:ff:ff:ff inet 192.168.43.190/24 brd 192.168.43.255 scope global dynamic noprefixroute wlp3s0

所以你的真实IP是192.168.43.190

【讨论】:

  • 我在哪里找到真实IP。我已经给出了两个命令,这里是两个命令的输出pastebin.com/v91294x0 等待您的回复谢谢
【解决方案4】:

使用主机名/地址172.17.0.1 创建一个server 并确保 PostgreSQL 正在监听 (*)。

install_pgadmin4_using_docker

【讨论】:

【解决方案5】:

您可以尝试添加到您的pg_hba.conf

host    all             all             0.0.0.0/0            trust

host    all             all             0.0.0.0/0            md5

测试。

如果这可行,您应该将 0.0.0.0/0 网络掩码更改为您的 docker bright 网络掩码。并再次检查。顺便提一句。要连接到您的 localhost(在主机上),您需要连接到 docker bright ip,它是 172.17.0.1/32

编辑: 二:postgresql.conf

取消注释并阅读其中的内容:

listen_addresses = '*'     # what IP address(es) to listen on;
                    # comma-separated list of addresses;
                    # defaults to 'localhost'; use '*' for all
                    # (change requires restart)

您需要绑定到可从 docker 连接的 IP,所以在我的情况下它应该是 172.17.0.1

【讨论】:

    【解决方案6】:

    我之前遇到了一些问题,现在我找到了解决方案。

    只需输入此命令

    docker exec <container_name> cat /etc/hosts
    

    然后它会显示这个

    127.0.0.1       localhost
    ::1     localhost ip6-localhost ip6-loopback
    fe00::0 ip6-localnet
    ff00::0 ip6-mcastprefix
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters
    172.18.0.3      607b00c25f29
    

    使用172.18.0.3 作为您的主机名

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2018-07-03
      • 2021-03-23
      • 2021-10-12
      • 2020-09-08
      • 1970-01-01
      • 1970-01-01
      • 2019-01-02
      • 1970-01-01
      • 2021-04-24
      相关资源
      最近更新 更多