簡體   English   中英

PostgreSQL和pgAdmin都在Docker容器中運行並連接

[英]PostgreSQL and pgAdmin both running in Docker containers and connecting

我試圖在Docker容器中運行PostgreSQL和pgAdmin。 我的想法是PostgreSQL數據庫應該可以被我在主機上運行的任何應用程序訪問,也可以訪問pgAdmin。

我正在使用此命令來運行PostgreSQL:

docker run -d -e POSTGRES_USER=username -e POSTGRES_PASSWORD=password --name postgres -p 5432:5432 postgres

並運行pgAdmin

docker run -d -p 1111:1111 --name pgadmin -e "PGADMIN_LISTEN_PORT=1111" -e "PGADMIN_DEFAULT_EMAIL=admin@test.com" -e "PGADMIN_DEFAULT_PASSWORD=test" dpage/pgadmin4

如果我去localhost:1111 ,我可以連接到pgAdmin並登錄。 但是,當我嘗試連接到我的本地PostgreSQL實例時,它沒有響應。

因此,我嘗試使用--net=host而不是-p 1111:1111運行pgAdmin來訪問主機Internet:

docker run -d --net=host --name pgadmin -e "PGADMIN_LISTEN_PORT=1111" -e "PGADMIN_DEFAULT_EMAIL=admin@test.com" -e "PGADMIN_DEFAULT_PASSWORD=test" dpage/pgadmin4

現在,當我嘗試訪問localhost:1111以連接到pgAdmin時,我的瀏覽器中沒有響應。

Docker Compose是一個可能的解決方案,因為我可以將兩個容器鏈接在一起,這樣他們就可以互相訪問而不必擔心端口,但我還需要pgAdmin才能訪問其他機器上的PostgreSQL實例,以及我的本地實例。

我覺得--net=host在Docker中被破壞了。 有一個整體的線程在這里有很多的困惑。

我的設置:

Host: Windows 10
Docker: Docker Desktop Community v2.0.0.3 (31259)

更新

我現在嘗試在pgAdmin容器上使用--link postgres ,它允許我連接到我的本地PostgreSQL實例,但不是非本地實例,完整命令是:

docker run -d -p 1111:1111 --link postgres --name pgadmin -e "PGADMIN_LISTEN_PORT=1111" -e "PGADMIN_DEFAULT_EMAIL=admin@test.com" -e "PGADMIN_DEFAULT_PASSWORD=test" dpage/pgadmin4

創建docker容器時,它會創建一個橋接網絡。 首先找到網橋的網絡范圍。 您可以使用ifconfig查找它。 假設172.17.0.5是pgAdmin的ip,然后為PostgreSQL創建一個用戶'root'@'172.17.0.5'並為該用戶授予數據庫權限。 然后,您可以連接到數據庫。 還要檢查端口3306是否可以使用telnet訪問。

命令沒有錯,只有pgAdmin中的連接,所以完整的命令列表是:


對於PostgreSQL:

docker run -d -e POSTGRES_USER=username -e POSTGRES_PASSWORD=password --name postgres -p 5432:5432 postgres

和pgAdmin:

docker run -d -p 1111:1111 --name pgadmin -e "PGADMIN_LISTEN_PORT=1111" -e "PGADMIN_DEFAULT_EMAIL=admin@test.com" -e "PGADMIN_DEFAULT_PASSWORD=test" dpage/pgadmin4

現在pgAdmin容器將不會連接到localhost但需要PostgreSQL容器的IP。 跑:

docker inspect postgres

檢查結果:

[
    {
        ...
        "NetworkSettings": {
            ...
            "Networks": {
                ...
                "IPAddress": "172.17.0.3",
                ...
            }
        }
    }
]

我們只對inspect命令中的IPAddress感興趣。 這是pgAdmin應該連接的IP。

pgAdmin還能夠從您的計算機訪問外部IP。

暫無
暫無

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

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