[英]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版),此選項才可用。
這是使用此新選項解決問題的方法:
我們假設您的主機名為myhost ( hostname
命令的輸出)。
您必須通過以下方式啟動容器:
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.