簡體   English   中英

Docker,將主機IP地址添加到新容器

[英]Docker, adding host ip address to new container

我將使用一個docker鏡像來創建新的容器。 我有一個要在我的機器上運行的PostgreSQL數據庫,我想將其連接到將來的容器。

我知道新創建的容器將位於172.17.0.0/16網絡中,因此我在PostgreSQL配置中為我的listen_addresses參數添加了該網絡。

現在,為了創建容器,我需要編寫如下內容:

docker run --add-host=connection_name:connection_ip container_name

connection_ip中我應該寫什么樣的地址? 我應該編寫localhost還是需要編寫靜態IP地址,以便可以從外部進行訪問?

如果您想讓容器在任何地方都可以工作,則不應依賴本地生成的網絡的IP地址(例如172.17.0.0/16):一些高級Docker引擎管理系統(例如Kubernetes)會對這些默認網絡進行更改,而某些雲Docker托管環境也是如此。

Docker通過--network選項專門處理您對容器托管通信的--network 運行新的Docker容器時,它可以讓您指定要鏈接的網絡名稱,而無需提供任何IP地址。

您需要一個較新的 Docker引擎(至少1.9版),此選項才可用。

這是使用此新選項解決問題的方法:

我們假設您的主機名為myhosthostname命令的輸出)。

您必須通過以下方式啟動容器:

docker run --network host container_name

--network參數host的值表示您要將此容器連接到主機。

現在,從您的容器內部,該主機名為myhost 此外,一個IP地址已映射到容器的/etc/hosts的主機名myhost ,並且該IP地址在網絡127.0.0.0/8中分配

因此,從主機的角度來看,從容器到myhost :5432的postgresql連接將被視為來自127.0.0.0/8。 然后,您只需將127.0.0.0/8添加到您的listen_addresses postgresql參數。

您應該對PostgreSQL配置中的listen_addresses使用0.0.0.0,以在兩個接口上進行偵聽。

如果您確實想在特定IP地址上運行,則必須使用docker network create創建一個網絡,並使用--ip選項進行docker-run或docker-create。

要從容器連接到Postgres數據庫,可以從入口點腳本中檢索默認網關IP地址。

從容器中,您可以使用ip route show檢索docker主機IP。

# ip route show
default via 172.17.0.1 dev eth0 
172.17.0.0/16 dev eth0  proto kernel  scope link  src 172.17.0.2

然后默認路由是您的主機IP(此處為172.17.0.1)

此時,請注意可能阻止連接的主機防火牆

在您的入口點腳本中,您可以使用ip route show |檢索主機IP。 awk'/ default / {print $ 3}'。 然后,您可以通過環境變量傳遞此IP,並在您的應用程序中檢索它。

暫無
暫無

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

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