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

时间:2020-06-18 07:12:12

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

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

enter image description here

我正在寻找将我的本地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

6 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

您可以使用图像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名称,该名称会将容器指向主机。这是在Mac或Windows的Docker中链接到主机的最简单方法。我希望我们也能尽快将其用于Linux。

有关docker-host的更多信息,请参见Github存储库:https://github.com/qoomon/docker-host

答案 2 :(得分:0)

首先调用此命令:sudo netstat -nplt,以确保有人在监听端口5432。
比致电sudo ip addr来了解您的主机mashine的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

答案 3 :(得分:0)

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

install_pgadmin4_using_docker

output

答案 4 :(得分:0)

您可以尝试将其添加到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

答案 5 :(得分:0)

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

只需输入此命令

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

希望能帮到你。