[英]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
您可以嘗試添加到您的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.