簡體   English   中英

從另一個容器訪問 Docker postgres 容器

[英]Access Docker postgres container from another container

我正在嘗試制作一個便攜式解決方案,讓我的應用程序容器連接到 postgres 容器。 “便攜”的意思是我可以給用戶兩個docker run命令,每個容器一個,它們將始終協同工作。

我在本地 PC 上運行了一個 postgres docker 容器,我像這樣運行它,

docker run -p 5432:5432 -v $(pwd)/datadir:/var/lib/postgresql/data -e POSTGRES_PASSWORD=qwerty -d postgres:11

我可以使用地址127.0.0.1:5432從 python flask 應用程序訪問它。

我也將 python 應用程序放在 docker 容器中,但在連接到 postgres 容器時遇到了問題。

地址127.0.0.1:5432不起作用。

地址172.17.0.2:5432確實有效(172.17.0.2 是運行 postgres 的 docker 容器的地址)。 但是我認為這不可移植,因為我不能保證 postgres 容器 IP 是什么。

我知道--add-host標志,但它也要求主機 IP,我想成為 localhost (127.0.0.1)。 盡管對--add-host了多次點擊,但我無法--add-host工作,因此最終的 docker run 命令在運行它們的任何計算機上都可以相同。

我也試過這個: docker container port accessed from another container

我的情況是 postgres 和 myApp 將是在同一台計算機上運行的容器。 我更喜歡非 Docker 組合解決方案。

來自Truong的評論讓我(再次)嘗試了這種方法,並且成功了。 這是我的步驟,以防它幫助另一個。 問題的關鍵是需要一個容器以靜態(沒有改變)的方式來處理另一個容器。 答案是使用用戶定義的網絡,因為您可以命名一個容器,從而通過該名稱引用該容器 IP。

我的腳步,

docker network create mynet
docker run --net mynet --name mydb -v $(pwd)/datadir:/var/lib/postgresql/data -e POSTGRES_PASSWORD=qwerty -d postgres:11

現在 postgres 數據庫的 IP 地址是mydb ,並且這個容器的所有端口都暴露給在這個網絡中運行的任何其他容器。

現在添加前端應用程序,

docker run --net mynet -ti -p 80:80 -v mydockerhubaccount/myapp

暫無
暫無

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

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