簡體   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