![](/img/trans.png)
[英]docker pgAdmin4 connection refused while connecting local postgres database
[英]Docker - Postgres and pgAdmin 4 : Connection refused
docker 的新手,我正在嘗試通過本地主機將我的 pgAdmin 容器連接到 postgres 容器。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0b00555238ba dpage/pgadmin4 "/entrypoint.sh" 43 minutes ago Up 43 minutes 0.0.0.0:80->80/tcp, 443/tcp pedantic_turing
e79fb6440a95 postgres "docker-entrypoint.s…" About an hour ago Up About an hour 0.0.0.0:5432->5432/tcp pg-docker
我成功連接了 psql 命令。
psql -h localhost -U postgres -d postgres
但是當我使用與 psql 相同的參數在 pgAdmin 上創建服務器時,出現以下錯誤。
無法連接到服務器:
無法連接到服務器:連接被拒絕 服務器是否在主機“localhost”(127.0.0.1) 上運行並在端口 5432 上接受 TCP/IP 連接? 無法連接到服務器:地址不可用 服務器是否在主機“localhost”(::1) 上運行並在端口 5432 上接受 TCP/IP 連接?
我通過docker inspect
容器給出的 IP 地址成功連接。
順便說一句,我檢查了 postgresql.conf 並斷言listen_addresses = '*'
並且 pg_hba.conf 包含host all all all md5
。
但是我不明白,為什么我不能使用本地主機地址? 為什么 docker 甚至給我一個不是本地的地址?
在這種情況下:
盡管您沒有指明是否這樣做,但理想情況下,兩個容器都可以成為用於自動 DNS 解析的自定義橋接網絡的一部分。
如果未明確添加,它們將成為默認網橋網絡的一部分。
要找出在 docker 運行時中創建的網絡,請鍵入: $ docker network ls
控制台中會列出一些網絡,也許你會發現一個[name]_default
它應該是你的網絡。
執行docker network inspect [name]_default
它會顯示一堆的信息,對我們來說最重要的是IPv4Address,這樣的事情: "7c3cd7532ab8aacc70830afb74adad7296d9c8ddd725c498af2d7ee2d2c2aadd": { "Name": "intime_postegres_1", "EndpointID": "56a9cb574469f22259497b72719f9f4a3e555b09f95058fcf389ef5287381f28", "MacAddress": "02:42:ac:12:00:02", "IPv4Address": "172.18.0.2/16", "IPv6Address": "" }
不要在 pgAdmin 新服務器對話框中使用 localhost 作為服務器名稱/ip,而是連接到 postgres 實例的“IPv4Address”。
在我的情況下,連接在172.18.0.2:5432
,就像一個魅力。
我也遇到過這種情況,您可以在終端上使用psql
命令進行連接,但無法使用 pgAdmin4。 以下解決方案對我有用。
第一的 -
docker ps
從那里您將獲得 postgres 容器的容器名稱/ID,然后執行 -
docker inspect name_of_container_here
它會給你這樣的東西 -
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "f35dbe66b36cd38673aad6e1278ad33031ef9d5abd34582d4b91955e288f855e",
"EndpointID": "2e63ea59e9d0de7526bb02ba29bc0b16bcad51b8963127ad380416d15da994db",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null
}
}
我遇到了同樣的問題,我以非規范的方式解決了它,但對我的本地工作流程非常滿意。
我總是用docker-compose.yaml
文件啟動我的 postgresql 容器。 所以我只是將 pgAdmin 添加到同一個撰寫文件中:
version: "3.7"
services:
my_awesome_db:
image: postgres:latest
ports:
- "5432:5432"
container_name: postgresql-local
volumes:
- "/var/run/postgres.sock:/var/run/postgres/postgres.sock"
- "/home/myuser/docker-apps/volumes/postgres-data:/var/lib/postgresql/data"
pg_admin:
image: dpage/pgadmin4:latest
container_name: pgadmin4
ports:
- "15432:80"
environment:
- GUNICORN_THREADS=1
- PGADMIN_DEFAULT_EMAIL=my_awesome_email@email.com
- PGADMIN_DEFAULT_PASSWORD=does_not_matter
depends_on:
- my_awesome_db
所以我在我的 localhost:15432 上訪問 pgAdmin(只是因為它很容易記住),並且我已經配置了 pgAdmin:
Host: my_awesome_db
Port: 5432
Username: postgres
對我來說是這樣工作的:
添加服務器 -> 連接 -> 主機名/地址
將字段設置為 172.17.0.1
Docker 網絡文檔中的更多信息: https : //docs.docker.com/network/network-tutorial-standalone
您只需要在連接字符串中指定服務器參數、容器名稱,而不是 localhost 或 127.0.0.1
首先你需要獲取容器信息
$docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0b00555238ba dpage/pgadmin4 "/entrypoint.sh" 43 minutes ago Up 43 minutes 0.0.0.0:80->80/tcp, 443/tcp pedantic_turing
e79fb6440a95 postgres "docker-entrypoint.s…" About an hour ago Up About an hour 0.0.0.0:5432->5432/tcp pg-docker
然后提取IP地址
$sudo docker inspect e79fb6440a95 | grep IPAddress
"SecondaryIPAddresses": null,
"IPAddress": "",
"IPAddress": "192.168.64.2",
當你創建你的服務器時,把你的 IP 地址
因為我是通過軟管連接到服務器,所以就像添加一樣簡單
--net host
到 docker run 命令,以便容器可以訪問主機的端口。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.