![](/img/trans.png)
[英]docker pgAdmin4 connection refused while connecting local postgres database
[英]docker postgres pgadmin local connection
我用 nginx、php 和 postgres 創建了一個 ubuntu 圖像。
我想將當前映像中的 postgres 數據庫與位於本地計算機上的pgadmin
連接起來。
我嘗試使用 docker 檢查器嘗試使用圖像 ip 與我的本地 pgadmin 建立連接,但沒有取得多大成功。 我還嘗試在本地配置一些端口以使連接正常工作。
這是一個有效的問題,不知道為什么人們覺得“似乎不可能回答那個問題”。
所以,這就是我如何做你想做的事情:
從 Docker Hub 拉取 postgres 鏡像
docker pull postgres:latest
使用以下命令運行容器
docker run -p 5432:5432 postgres
使用docker的inspect命令查找IP
使用該 IP、端口、用戶名和密碼在 PGADMIN 中連接
您還可以執行如下簡單的 telnet 來確認您是否可以訪問 docker postgres 容器:
telnet IP_ADDRESS 5432
我在 Windows 10 上成功運行 docker for windows 1.12.6(9655),步驟如下:
拉取最新的postgres
docker pull postgres:latest
運行 postgres 容器:
docker run -d -e POSTGRES_USER=user -e POSTGRES_PASSWORD=password123 --name db-my -p 5432:5432 --restart=always postgres
然后從pgadmin 網站安裝最新版本的 pgAdmin4
運行pgAdmin 4 create new server,輸入如下主機:127.0.0.1 端口:5432 用戶名:用戶密碼:password123
或者,您可以將 Postgres 和 Pgadmin 組合在一個 docker docker-compose
文件中,並以用戶pgadmin4@pgadmin.org
登錄,密碼: admin
。 要添加 Posgres 服務器,請使用主機名postgres
,端口5432
。
version: '3'
services:
postgres:
image: postgres
hostname: postgres
ports:
- "6543:5432"
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: TEST_SM
volumes:
- postgres-data:/var/lib/postgresql/data
restart: unless-stopped
pgadmin:
image: dpage/pgadmin4
depends_on:
- postgres
ports:
- "5555:80"
environment:
PGADMIN_DEFAULT_EMAIL: pgadmin4@pgadmin.org
PGADMIN_DEFAULT_PASSWORD: admin
restart: unless-stopped
volumes:
postgres-data:
這就是我所做的
docker run -p 5432:5432 --name container-postgresdb -e POSTGRES_PASSWORD=admin -d postgres
docker run -p 5050:80 -e "PGADMIN_DEFAULT_EMAIL=name@example.com" -e "PGADMIN_DEFAULT_PASSWORD=admin" -d dpage/pgadmin4
host: host.docker.internal
database: postgres
user: postgres
password: admin
它工作正常!!!!
就我而言,我可以通過命令解決檢查我的 postgre 圖像的問題
docker inspect CONTAINER_ID | grep IPAddress.
所以,我使用 docker ip 地址來配置我的 pgadmin 4 連接,一切都很好。 感謝@Afshin Ghazi
如果 pgAdmin 打算在相同的 Ubuntu 主機/來賓中運行,那么您需要鏈接 postgres 容器,以便可以通過名稱解析它。
1. 運行一個 postgres 容器:
docker run --name some-postgres -e POSTGRES_PASSWORD=postgres -d postgres
2. 運行 pgAdmin 容器:
docker run -p 80:80 --link some-postgres -e "PGADMIN_DEFAULT_EMAIL=email@domain.com" -e "PGADMIN_DEFAULT_PASSWORD=postgres" -d dpage/pgadmin4
3. 現在在 phAdmin web 應用程序中添加新服務器時,使用some-postgres
作為服務器名稱
請注意我們啟動 pgAdmin 時的--link some-postgres
。 此命令使 postgres 容器對 pgAdmin 容器可見。
我將其包含在 docker yaml 文件中以獲取數據庫和 pgAdmin:
database:
image: postgres:10.4-alpine
container_name: kafka-nodejs-example-database
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
expose:
- "5432"
ports:
- 8000:5432
volumes:
- ./services/database/schema.sql:/docker-entrypoint-initdb.d/1-schema.sql
- ./services/database/seed.sql:/docker-entrypoint-initdb.d/2-seed.sql
pgadmin:
image: dpage/pgadmin4
ports:
- 5454:5454/tcp
environment:
- PGADMIN_DEFAULT_EMAIL=admin@mydomain.com
- PGADMIN_DEFAULT_PASSWORD=postgres
- PGADMIN_LISTEN_PORT=5454
postgres 用戶名是 alphaone,密碼是 xxxxxxxxxxx。
執行docker inspect <dockerContainerId> | grep IPAddress
docker ps
以獲取容器 id,然后docker inspect <dockerContainerId> | grep IPAddress
docker inspect <dockerContainerId> | grep IPAddress
例如: docker inspect 2f50fabe8a87 | grep IPAddress
docker inspect 2f50fabe8a87 | grep IPAddress
將 IP 地址插入 pgAdmin 和 docker 中使用的數據庫憑據:
面對這個問題兩天后,我能夠解決這個問題。
這個問題的解決方案已經得到了人們的回答,比如 do inspect
docker inspect CONTAINER_ID
但是在運行這個命令時,我得到了很多日志,比如Host Config Config Network Settings等,所以我對在pgAdmin連接中添加哪個 IPAddress 感到困惑,因為我嘗試了0.0.0.0和 config、host、networkSettings 不同的 -2 IPAddress 在日志,但最終它在嘗試了很多之后有效。
它適用於哪個 IP,我們必須添加該網絡 IP 地址(我們創建該地址以連接postgres和pgAdmin 。)
就像我跑步時的情況一樣:-
碼頭工人檢查 postgres_container
"NetworkSettings": {
"Bridge": "",
"SandboxID": "sdffsffsfsfsfsf123232e2r3pru3ouoyoyuosyvo8769696796",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {
"5432/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "5432"
}
]
},
"SandboxKey": "/var/run/docker/231231Ad132",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "",
"Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "",
"IPPrefixLen": 0,
"IPv6Gateway": "",
"MacAddress": "",
"Networks": {
"postgres": {
"IPAMConfig": null,
"Links": null,
"Aliases": [
"postgres",
"0e2j3bn2m42"
],
"NetworkID": "35rhlhl3l53l5hlh3523233k3k4k22l3hk2k4",
"EndpointID":"b3424n43k52o2i4n235k1k4l2l4hj234f14n2",
"Gateway": "192.168.16.1",
"IPAddress": "192.168.16.2",
"IPPrefixLen": 20,
"IPv6Gateway": "",
所以我們必須添加 NetworkSettings -> Network -> Postgres(mine created network) -> IPAddress ie "IPAddress": "192.168.16.2"。
添加此IP后,它將起作用。
我希望它會有所幫助。
這在 Ubuntu 18 上對我有用:
1- 運行一個 postgres 容器
docker run -d -e POSTGRES_USER=user -e POSTGRES_PASSWORD=password123 --name my-postgres -p 5432:5432 postgres
2- 運行 pgAdmin 容器
docker run --rm -p 5050:5050 thajeztah/pgadmin4
3- 獲取您的本地 IP(在 Ubuntu 中通過ifconfig
命令)
4- 在瀏覽器中打開localhost:5050
5- 單擊服務器>>創建>>服務器...
6- 在常規選項卡中,為其命名,例如:docker。 在連接選項卡中,輸入以下字段:
主機名:來自 3 的 IP
用戶名:用戶
密碼:password123
7- 單擊保存,現在一切正常。
注意:如果這不起作用,請嘗試使用“localhost”作為主機名。
為了或查找容器的 IP,請使用以下命令
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id
就我而言,我有一個 PostgreSQL 容器,所以我沒有更改我的容器或創建 docker-compose 方法,幾個月后我需要 pgadming 安裝 PostgreSQL,所以這是我的方法:
docker inspect my_container_id_postgreSQL
分配給 PostgreSQL 的網絡是:
"網絡": { "docker_default": { "IPAddress": "172.18.0.2", ... } }
使用--network
命令運行我的 PGADMIN。
docker run -p 85:80 --network docker_default -e 'PGADMIN_DEFAULT_EMAIL=user@domain.com' -e 'PGADMIN_DEFAULT_PASSWORD=SuperSecret' -d dpage/pgadmin4
將 IP 地址插入 pgAdmin 和 docker 中使用的數據庫憑據。
我希望這對某人有用。 問候。
您必須將容器中的 postgres 端口公開給您的本地系統。 你可以通過像這樣運行你的容器來做到這一點:
docker run -p 5432:5432 <name/id of container>
與 GUI 客戶端或 CLI 連接時,請確保使用 ip-address 而不是 localhost,即使您的 ip-address 是 localhost ip-address。
docker ps
會給你你的 postgres 容器所在的 IP 地址。
您也可以創建一個 Docker 橋接網絡來執行此操作。
$ docker network create pgnet
a0ae44aaf6f806fc37302e4c603b4828c4edb8d487fd9cd90e2fb19ae1d5c65f
$ docker run --detach \
--name pg \
--network pgnet \
--publish 5432:5432 \
--restart always \
--env POSTGRES_PASSWORD=pg123 \
--volume ${PWD}/data:/var/lib/postgresql/data \
postgres:12.1
b60611e43727dabe483c1f08fdf74961b886ce05b432a10a0625bd1b6db87899
$ docker run --detach \
--name pgadm \
--network pgnet \
--publish 8000:80 \
--volume ${PWD}/pgadmin:/var/lib/pgadmin \
--env PGADMIN_DEFAULT_EMAIL=user@domain.com \
--env PGADMIN_DEFAULT_PASSWORD=pgadm123 \
dpage/pgadmin4:4.20
27f9ce1c1c4c383ee1507f4e2d88f6ef33d4fcf5b209a8a03b87519f90d56312
上面使用的 Hostname/address 是由--name pg
給出的 Postgres 容器的名稱
如果您使用的是 mac 和 localhost,請使用以下憑據:
version: '3.5'
services:
postgres:
container_name: postgres_container
image: postgres
environment:
POSTGRES_USER: ${POSTGRES_USER:-postgres}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-changeme}
PGDATA: /data/postgres
volumes:
- postgres:/data/postgres
ports:
- "5432:5432"
networks:
- postgres
restart: unless-stopped
pgadmin:
container_name: pgadmin_container
image: dpage/pgadmin4
environment:
PGADMIN_DEFAULT_EMAIL: ${PGADMIN_DEFAULT_EMAIL:-pgadmin4@pgadmin.org}
PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_DEFAULT_PASSWORD:-admin}
PGADMIN_CONFIG_SERVER_MODE: 'False'
volumes:
- pgadmin:/var/lib/pgadmin
ports:
- "${PGADMIN_PORT:-5050}:80"
networks:
- postgres
restart: unless-stopped
networks:
postgres:
driver: bridge
volumes:
postgres:
pgadmin:
聯系:
主機名/地址: host.docker.internal
或0.0.0.0
端口: 5432
用戶名: postgres
數據庫: postgres
密碼: changeme
要為您的容器找到正確的 ip,請執行以下命令:
檢查容器 ID:
docker ps
要檢查容器的正確 IP:
docker inspect <ID_CONTAINER> | grep "IPAddress"
PostgreSQL 和 PgAdmin 與 Docker 的配置都很簡單,如果不正確,我建議從頭開始重新配置,如果您的問題更深層次。
這是我為解決此問題而開發的腳本。 script-sh/install-docker-postgres-and-pgadmin
對於 macOS, postgres
和pgadmin4
IP 與pgadmin4
docker inspect
提供的 IP 不同。 類型
docker-machine ls
查看左側的服務器名稱。 default
情況下它是default
的。
docker-machine ip default
將IP,您需要使用兩個, pgadmin4
在瀏覽器和postgres
在pgadmin4
設置。
我跑了這個,它對我有用
docker pull dpage/pgadmin4
docker run -p 9000:80 -e 'PGADMIN_DEFAULT_EMAIL=test@gmail.com' -e 'PGADMIN_DEFAULT_PASSWORD=root' -d dpage/pgadmin4
我在運行 Docker Desktop for macOS(M1) 的 macOS Monterrey 上取得的成功:
docker pull postgres
docker run -d -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres --name postgres-server -p 5432:5432 --restart=always postgres
然后從pgadmin 網站安裝最新版本的 pgAdmin 4 (macOS)
運行 pgAdmin 4 創建新服務器,輸入如下主機:127.0.0.1 端口:5432 用戶名: postgres
密碼: postgres
我嘗試並為我工作的解決方案是創建一個 docker compose 文件,我將 postgress 和 pgadmin 作為服務包含在其中。 有關更多詳細信息: 將 pgadmin 連接到 docker 中的 postgres
您是否使用 Window Subsystem Linux WSL2
來運行 Docker 和 PgAdmin? 我建議的步驟類似於人們建議的步驟。 就我而言,我使用的是窗口環境
步驟 1:打開 CMD 並輸入ipconfig
並按回車鍵。
步驟 2:檢查 WSL IPv4 Adress
Ethernet adapter vEthernet (WSL):
Connection-specific DNS Suffix . :
Link-local IPv6 Address . . . . . : 3bd9::997b:b52a::fe80::65b3%63
IPv4 Address. . . . . . . . . . . : 172.172.172.1 // use the IP as host/address
Subnet Mask . . . . . . . . . . . : 255.255.255.255
第 3 步:從瀏覽器中打開 PgAdmin 並創建一個服務器
第四步:
// Here it depends on your desired config mine is the following
Server: postgres
host address: IPv4 Address(step 2)
username: postgress(username for postgress)
password: password(password for postgress)
我花了兩天時間弄清楚出了什么問題,希望有人會發現它有幫助
當你啟動容器時,你有它的網絡別名。 只需在 pgadmin UI 中使用此別名。 就像如果您有以下 docker compose 配置:
version: "3.5"
services:
postgres:
container_name: postgres-14
image: postgres:14.1
restart: unless-stopped
ports:
- "5432:5432"
environment:
- POSTGRES_HOST_AUTH_METHOD=trust
- POSTGRES_PASSWORD=root
- POSTGRES_USER=postgres
hostname: postgres
pgadmin:
container_name: pgadmin4
image: dpage/pgadmin4
restart: unless-stopped
ports:
- "80:80"
environment:
- POSTGRES_HOST_AUTH_METHOD=trust
- PGADMIN_DEFAULT_EMAIL=user@domain.com
- PGADMIN_DEFAULT_PASSWORD=admin
hostname: pgadmin
您可以使用主機名添加服務器: postgres
我沒有從0.0.0.0:9090 上的瀏覽器連接到我的容器pg
(dpage/pgadmin4 圖像)。
我運行了這個命令:
docker run --name pg -p 9090:9090 -e PGADMIN_DEFAULT_EMAIL='faizan' -e PGADMIN_DEFAULT_PASSWORD='faizan' -d dpage/pgadmin4
解決方案一:
首先,我嘗試檢查容器的 IP 地址
docker inspect pg
我得到了容器 IP 地址"IPAddress": "172.17.0.3"
。 http://172.17.0.3:9090無法訪問。
解決方案二:
然后我在沒有解除附加模式的情況下運行命令(-d 已刪除)
docker run --name pg -p 9090:9090 -e PGADMIN_DEFAULT_EMAIL='faizan' -e PGADMIN_DEFAULT_PASSWORD='faizan' dpage/pgadmin4
# Output, it should be running on 9090.
Listening at: http://[::]:80
-p 9090:9090
不起作用。
最后我找到了解決方案:
在一些不支持擴展屬性的文件系統上,可能無法在不指定大於 1024 的 PGADMIN_LISTEN_PORT 值的情況下運行 pgAdmin。在這種情況下,通過添加環境變量在啟動容器時指定備用端口,例如:
-e 'PGADMIN_LISTEN_PORT=5050'
不要忘記相應地調整任何主機-容器端口映射。
我添加了-e 'PGADMIN_LISTEN_PORT=9090'
並為我工作。
您可以嘗試這兩種解決方案,它肯定對您有用。
pgAdmin-4 :版本 6.12
我在這里和其他地方嘗試了幾個答案,但對我沒有任何幫助。
這是我遇到的問題和解決方案。 我有一個 docker postgres 運行我的機器,需要在 pgAdmin 中連接這個服務器。
我需要做的就是檢查 docker 信息並根據 pgAdmin 中的信息填寫服務器配置。
您可以通過打開 docker 並轉到儀表板然后選擇您正在使用的 postgres 圖像來執行此操作。 有一個名為“ Inspect
”的選項卡單擊它。 在這里,您可以獲得有關該 postgres 容器的所有信息。
現在打開pgAdmin
並通過右鍵單擊服務器 -> 注冊 -> 服務器來抵抗服務器。
為服務器選擇一個名稱,然后單擊Connection
選項卡。 這里我們需要填寫主機名/地址、IP、端口等數據。
在 docker Inspect
選項卡中,您可以從Ports
部分獲取此數據,如下所示:
所以根據這張圖片你的主機地址是172.0.0.1
和端口是5873
。 docker Inspect
選項卡的Environment
部分也提供數據庫、用戶和密碼等其他信息。
現在填寫其他信息,單擊 pgAdmin 中的save
,它應該可以工作。
以下是對我有用的完整步驟
下載並安裝pgadmin GUI 工具
運行 docker 容器: docker-compose up my-db
。
從此命令日志中,記下ipv4 address
和port
。 就我而言,它是0.0.0.0
和5432
。
docker-compose.yml
文件並記下 POSTGRES PASSWORDpgadmin gui
在連接選項卡中:
Hostname/address
中輸入該ipv4 address
地址port
password
中輸入該POSTGRES PASSWORD
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.