Docker的網(wǎng)絡(luò)模式

Docker 支持的網(wǎng)絡(luò)模式有:

  • none。關(guān)閉容器內(nèi)的網(wǎng)絡(luò)連接
  • bridge。通過 veth 接口來連接容器,默認(rèn)配置。
  • host。允許容器使用 host 的網(wǎng)絡(luò)堆棧信息。注意:這種方式將允許容器訪問 host 中類似 D-BUS 之類的系統(tǒng)服務(wù),所以認(rèn)為是不安全的。
  • container。使用另外一個(gè)容器的網(wǎng)絡(luò)堆棧信息。

None 模式

將網(wǎng)絡(luò)模式設(shè)置為 none 時(shí),這個(gè)容器將不允許訪問任何外部 router。這個(gè)容器內(nèi)部只會(huì)有一個(gè) loopback 接口,而且不存在任何可以訪問外部網(wǎng)絡(luò)的 router。

Bridge 模式

Docker 默認(rèn)會(huì)將容器設(shè)置為 bridge 模式。此時(shí)在主機(jī)上面將會(huì)存在一個(gè) docker0 的網(wǎng)絡(luò)接口,同時(shí)會(huì)針對(duì)容器創(chuàng)建一對(duì) veth 接口。其中一個(gè) veth 接口是在主機(jī)充當(dāng)網(wǎng)卡橋接作用,另外一個(gè) veth 接口存在于容器的命名空間中,并且指向容器的 loopback。Docker 會(huì)自動(dòng)給這個(gè)容器分配一個(gè) IP ,并且將容器內(nèi)的數(shù)據(jù)通過橋接轉(zhuǎn)發(fā)到外部。

Host 模式

當(dāng)網(wǎng)絡(luò)模式設(shè)置為 host 時(shí),這個(gè)容器將完全共享 host 的網(wǎng)絡(luò)堆棧。host 所有的網(wǎng)絡(luò)接口將完全對(duì)容器開放。容器的主機(jī)名也會(huì)存在于主機(jī)的 hostname 中。這時(shí),容器所有對(duì)外暴露的端口和對(duì)其它容器的連接,將完全失效。

Container 模式

當(dāng)網(wǎng)絡(luò)模式設(shè)置為Container時(shí),這個(gè)容器將完全復(fù)用另外一個(gè)容器的網(wǎng)絡(luò)堆棧。同時(shí)使用時(shí)這個(gè)容器的名稱必須要符合下面的格式:--net container:.

比如當(dāng)前有一個(gè)綁定了本地地址 localhost 的 Redis 容器。如果另外一個(gè)容器需要復(fù)用這個(gè)網(wǎng)絡(luò)堆棧,則需要如下操作:

$ sudo docker run -d --name redis example/redis --bind 127.0.0.1
$ # use the redis container's network stack to access localhost
$ sudo docker run --rm -ti --net container:redis example/redis-cli -h 127.0.0.1
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容