国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > 幫助中心 > 正文

綁定Dokcer容器到主機指定網卡的方法

2024-07-09 22:41:35
字體:
來源:轉載
供稿:網友

如果你的主機有多塊網卡,你可能會需要把 Docker 容器綁定到指定網卡,以使容器內的所有網絡請求都經過該指定網卡發送至外網。

不幸的是,Docker 并沒有直接提供實現該需求的方法。不過,通過 iptables 可以輕松搞定。

一刀切

假設你的主機上有兩塊網卡:一塊網卡的 IP 地址是 192.168.0.100 ;另一塊網卡的 IP 地址是 10.0.0.100 。你想讓這臺主機上的 Docker 容器內的所有服務都走第二塊網卡進出外網。

先給出答案再解釋:

復制代碼 代碼如下:iptables -t nat -I POSTROUTING -p all -s 172.17.0.0/16 -j SNAT --to-source 10.0.0.100

上面的 iptables 命令創建了一條源地址轉換( SNAT )規則,把所有來自 172.17.0.0/16 網段且即將流出本主機的數據包的源 IP 地址都修改為 10.0.0.100 。

對于 10.0.0.100 我們知道它是主機第二塊網卡的 IP 地址。而 172.17.0.0/16 是從哪來的呢?

簡單來說,在主機上運行 Docker 時,它會在主機上創建一個名為 docker0 的網橋,其 IP 地址為 172.17.0.1 ,網段為 172.17.0.0/16 。默認情況下,Docker 會為所有容器從該網段分配一個 IP 地址。

更詳細的說明,可以參考這篇《單 Host 下 Docker 的默認網絡配置》 。

所有 Docker 容器的 IP 地址都是在 172.17.0.0/16 網段,那么,上邊的 iptables 命令創建的規則就是把所有來自 Docker 容器的且即將流出本主機的數據包的源 IP 地址都修改為本主機的第二塊網卡的 IP 地址,即 10.0.0.100 。

這樣,就實現了我們需求的『出』這半部分。

而『進』那半部分需求的實現也很簡單,只需在 docker run 的時候通過 -p 參數指定主機 IP 即可,如:

docker run -p 10.0.0.100:80:80 ...

分而治

需求變化很快,或許我們又多了一塊網卡,其 IP 地址為 10.0.0.101 。而由于某種原因,我們想讓一部分容器的流量走第二塊網卡,同時讓另一部分容器的流量走新加的這第三塊網卡。

由于在使用默認網橋時,Docker 不允許為容器指定 IP 地址(如果你指定 IP 地址,Docker 會給出如下錯誤提示),所以我們無法提前預知某個容器最終被分配給的 IP 地址是什么,也就無法提前通過 iptables 規則為其指定出口網卡。

docker: Error response from daemon: user specified IP address is supported on user defined networks only.

其實,上面的錯誤提示已經給出了解決的辦法,那就是用戶自定義網絡。

用以下命令創建自定義網絡:

復制代碼 代碼如下:docker network create --subnet=172.18.0.0/16 --opt "com.docker.network.bridge.name"="docker1"  docker1

其中,172.18.0.0/16 為新建網橋所在網段。因為 Dokcer 默認網橋已經占用了 172.17.0.0/16 ,所以新建網橋只能使用未被占用的其他網段。

第一個 docker1 為執行 ifconfig -a 命令時,顯示的網橋名,如果不使用 --opt 參數指定此名稱,那你在使用 ifconfig -a 命令查看網絡信息時,看到的是類似 br-110eb56a0b22 這樣的名字。這顯然不怎么好看/記;

第二個 docker1 為執行 docker network list 命令時,顯示的網橋名。

有了自定義網絡,我們就可以為容器指定一個固定 IP 地址了。

docker run --network=docker1 --ip=172.18.0.100 ......docker run --network=docker1 --ip=172.18.0.101 ......

知道了容器的固定 IP 地址,那我們就可以如法炮制,把該容器綁定到指定主機網卡了:

iptables -t nat -I POSTROUTING -p all -s 172.18.0.100 -j SNAT --to-source 10.0.0.100iptables -t nat -I POSTROUTING -p all -s 172.18.0.101 -j SNAT --to-source 10.0.0.101
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 获嘉县| 石林| 长泰县| 承德市| 互助| 逊克县| 寿阳县| 邛崃市| 沂水县| 西乌珠穆沁旗| 深圳市| 尼玛县| 宁河县| 寻乌县| 仪征市| 偏关县| 同心县| 澄迈县| 缙云县| 宝鸡市| 五大连池市| 怀远县| 禄丰县| 贵溪市| 松滋市| 澄城县| 错那县| 剑阁县| 德钦县| 稻城县| 铜川市| 嘉禾县| 大足县| 韶关市| 临漳县| 灌阳县| 涟水县| 安溪县| 祁东县| 南溪县| 新泰市|