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