簡體   English   中英

docker postgres pgadmin 本地連接

[英]docker postgres pgadmin local connection

我用 nginx、php 和 postgres 創建了一個 ubuntu 圖像。

我想將當前映像中的 postgres 數據庫與位於本地計算機上的pgadmin連接起來。

我嘗試使用 docker 檢查器嘗試使用圖像 ip 與我的本地 pgadmin 建立連接,但沒有取得多大成功。 我還嘗試在本地配置一些端口以使連接正常工作。

這是一個有效的問題,不知道為什么人們覺得“似乎不可能回答那個問題”。

所以,這就是我如何做你想做的事情:

  1. 從 Docker Hub 拉取 postgres 鏡像

    docker pull postgres:latest
  2. 使用以下命令運行容器

    docker run -p 5432:5432 postgres
  3. 使用docker的inspect命令查找IP

  4. 使用該 IP、端口、用戶名和密碼在 PGADMIN 中連接

  5. 您還可以執行如下簡單的 telnet 來確認您是否可以訪問 docker postgres 容器:

     telnet IP_ADDRESS 5432

我在 Windows 10 上成功運行 docker for windows 1.12.6(9655),步驟如下:

  1. 拉取最新的postgres

    docker pull postgres:latest

  2. 運行 postgres 容器:

    docker run -d -e POSTGRES_USER=user -e POSTGRES_PASSWORD=password123 --name db-my -p 5432:5432 --restart=always postgres

  3. 然后從pgadmin 網站安裝最新版本的 pgAdmin4

  4. 運行pgAdmin 4 create new server,輸入如下主機:127.0.0.1 端口:5432 用戶名:用戶密碼:password123

  5. 然后一切正常,連接docker postgres實例成功。

或者,您可以將 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:

這就是我所做的

對於 postgres

docker run -p 5432:5432  --name container-postgresdb -e POSTGRES_PASSWORD=admin -d postgres

對於 pgadmin

docker run -p 5050:80  -e "PGADMIN_DEFAULT_EMAIL=name@example.com" -e "PGADMIN_DEFAULT_PASSWORD=admin"  -d dpage/pgadmin4

pgadmin 的連接字符串

host: host.docker.internal
database: postgres
user: postgres
password: admin

它工作正常!!!!

如果您確認 PostgreSQL 正在運行,並且您可以使用 PgAdmin 的本地副本連接到那里...

答案很簡單:在 Docker 內部運行的 PgAdmin 使用host.docker.internal不是localhost

使用 <code>host.docker.internal</code> 代替 <code>localhost</code>

就我而言,我可以通過命令解決檢查我的 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 地址(我們創建該地址以連接postgrespgAdmin 。)

就像我跑步時的情況一樣:-

碼頭工人檢查 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

參考: 如何從主機獲取Docker容器的IP地址

就我而言,我有一個 PostgreSQL 容器,所以我沒有更改我的容器或創建 docker-compose 方法,幾個月后我需要 pgadming 安裝 PostgreSQL,所以這是我的方法:

  1. docker inspect my_container_id_postgreSQL
  2. 分配給 PostgreSQL 的網絡是:

    "網絡": { "docker_default": { "IPAddress": "172.18.0.2", ... } }

  3. 使用--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

  4. 將 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

打開http://localhost:8000/

  1. 單擊添加新服務器
  2. 創建 - 服務器
    1. 名稱: db
    2. 主機名/地址:pg
    3. 用戶名:postgres
    4. 密碼:pg123
  3. 節省

上面使用的 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.internal0.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, postgrespgadmin4 IP 與pgadmin4 docker inspect提供的 IP 不同。 類型

docker-machine ls

查看左側的服務器名稱。 default情況下它是default的。

docker-machine ip default將IP,您需要使用兩個pgadmin4在瀏覽器和postgrespgadmin4設置。

我跑了這個,它對我有用

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 上取得的成功:

  1. 拉取最新的 postgres:

docker pull postgres

  1. 運行 postgres 容器:

docker run -d -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres --name postgres-server -p 5432:5432 --restart=always postgres

  1. 然后從pgadmin 網站安裝最新版本的 pgAdmin 4 (macOS)

  2. 運行 pgAdmin 4 創建新服務器,輸入如下主機:127.0.0.1 端口:5432 用戶名: postgres密碼: postgres

pgAdmin 4:連接 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)

我花了兩天時間弄清楚出了什么問題,希望有人會發現它有幫助

如果本地主機端口 5432 已被其他 psql 服務器使用,請在創建容器和 Pgadmin 時更改它。 屏幕

當你啟動容器時,你有它的網絡別名。 只需在 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'並為我工作。

您可以嘗試這兩種解決方案,它肯定對您有用。

在 Mac 上測試

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 ,它應該可以工作。

以下是對我有用的完整步驟

  1. 下載並安裝pgadmin GUI 工具

  2. 運行 docker 容器: docker-compose up my-db

從此命令日志中,記下ipv4 addressport 就我而言,它是0.0.0.05432

在此處輸入圖像描述

  1. 打開docker-compose.yml文件並記下 POSTGRES PASSWORD

在此處輸入圖像描述

  1. 打開pgadmin gui
  • 輸入名字

在此處輸入圖像描述

在連接選項卡中:

  • Hostname/address中輸入該ipv4 address地址
  • 進入那個port
  • password中輸入該POSTGRES PASSWORD
  • 節省。

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM