繁体   English   中英

docker pgAdmin4 连接在连接本地 postgres 数据库时被拒绝

[英]docker pgAdmin4 connection refused while connecting local postgres database

我正在尝试使用 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

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

您可以使用镜像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 正在侦听此地址。

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

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

首先调用它: sudo netstat -nplt以确保有人在端口 5432 上监听。
比调用sudo ip addr来了解主机主机的 IP。
比尝试使用真正的 IP 而不是localhost进行连接。
我在您的ip addr output 中看到:

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

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

install_pgadmin4_using_docker

输出

您可以尝试添加到您的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 明亮网络掩码。 并再次检查。 顺便提一句。 要连接到您的本地主机(在主机上),您需要连接到 docker 明亮的 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

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

只需输入此命令

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作为主机名

希望这可以帮到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM