Docker容器訪問宿主機網路

2021-10-03 04:18:34 字數 1277 閱讀 5015

業務請求量小的時候,我們會把一些工程部署到同一臺機器上。 這些工程之間也會相互訪問。 如果是http的介面, 我們最方便的是使用localhost帶地本機的ip。不過結合docker容器後出現了問題。 docker容器中localhost表示容器的ip位址。不是宿主機ip。

其實docker容器執行的時候有host、bridge、none三種網路可供配置。預設是bridge,即橋接網路,以橋接模式連線到宿主機;host是宿主網路,即與宿主機共用網路;none則表示無網路,容器將無法聯網。

host

當容器使用host網路時,容器與宿主共用網路,這樣就能在容器中訪問宿主機網路,那麼容器的localhost就是宿主機的localhost。

在docker中使用–network host來為容器配置host網路:

docker run -d --name nginx --network host nginx
如果使用了host就沒有必要使用-p 80:80 -p 443:443來對映埠,是因為本身與宿主機共用了網路,容器中暴露埠等同於宿主機暴露埠。雖然通用性好。但是由於host網路沒有bridge網路的隔離性好,使用host網路安全性不如bridge高。

bridge

使用橋接的方式我們可以通過引數把宿主機的ip傳入到容器中

docker run -d --name nginx --env hostip="172.17.32.60"
先通過命令看看能不能在容器中取到傳入的引數hostip

得到結果「hostip=10.10.10.10」

下面提供下程式中執行系統命令的方法

// cmd 可以傳入 env|grep hostip

public static string run(string command) );

process.waitfor(2, timeunit.seconds);

input = new scanner(process.getinputstream());

while (input.hasnextline())

} catch (exception e) finally

if (process != null)

}return result;

}

// cmd 可以傳入 env|grep hostip

func cmd(cmd string) byte

return out

}

docker宿主機訪問docker容器服務失敗

原因 因為docker的虛擬ip網段是172.17.與區域網的ip網段172.17衝突了,所以有兩種方式 解決方法 一 修改docker網絡卡資訊,將網段改為與區域網不同的即可 linux修改方法 第一步 刪除原有配置 sudo service docker stop sudo ip link se...

docker從容器中怎麼訪問宿主機

docker搭建了lnmp環境後,如果需要訪問安裝在宿主機上的資料庫或中介軟體,是不能直接使用127.0.0.1這個ip的,這個ip在容器中指向容器自己,那麼應該怎麼去訪問宿主機呢 例如你的docker環境的虛擬ip是192.168.99.100,那麼宿主機同樣會託管乙個和192.168.99.10...

docker 容器訪問宿主機的解決方式

基於本地docker的自研及使用需要,希望docker容器的服務能連線到宿主機提供的服務。網路上查閱了大量的資料,基本的解決辦法是通過手動查閱ip的方式進行,但docker宿主機的ip是會動態改變的,並不能保證永久不變。因此此舉是行不通。使用 net host 的網路模式。但實踐,發現win環境下,...