新聞中心
容器的訪問(wèn)控制,主要通過(guò) Linux 上的 iptables 防火墻來(lái)進(jìn)行管理和實(shí)現(xiàn)。iptables 是 Linux 上默認(rèn)的防火墻軟件,在大部分發(fā)行版中都自帶。

成都創(chuàng)新互聯(lián)公司長(zhǎng)期為上1000+客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為貴州企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站,貴州網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。
容器訪問(wèn)外部網(wǎng)絡(luò)
容器要想訪問(wèn)外部網(wǎng)絡(luò),需要本地系統(tǒng)的轉(zhuǎn)發(fā)支持。在Linux 系統(tǒng)中,檢查轉(zhuǎn)發(fā)是否打開(kāi)。
$sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1如果為 0,說(shuō)明沒(méi)有開(kāi)啟轉(zhuǎn)發(fā),則需要手動(dòng)打開(kāi)。
$sysctl -w net.ipv4.ip_forward=1如果在啟動(dòng) Docker 服務(wù)的時(shí)候設(shè)定 --ip-forward=true, Docker 就會(huì)自動(dòng)設(shè)定系統(tǒng)的 ip_forward 參數(shù)為 1。
容器之間訪問(wèn)
容器之間相互訪問(wèn),需要兩方面的支持。
- 容器的網(wǎng)絡(luò)拓?fù)涫欠褚呀?jīng)互聯(lián)。默認(rèn)情況下,所有容器都會(huì)被連接到
docker0網(wǎng)橋上。 - 本地系統(tǒng)的防火墻軟件 --
iptables是否允許通過(guò)。
訪問(wèn)所有端口
當(dāng)啟動(dòng) Docker 服務(wù)時(shí)候,默認(rèn)會(huì)添加一條轉(zhuǎn)發(fā)策略到 iptables 的 FORWARD 鏈上。策略為通過(guò)(ACCEPT)還是禁止(DROP)取決于配置--icc=true(缺省值)還是 --icc=false。當(dāng)然,如果手動(dòng)指定 --iptables=false 則不會(huì)添加 iptables 規(guī)則。
可見(jiàn),默認(rèn)情況下,不同容器之間是允許網(wǎng)絡(luò)互通的。如果為了安全考慮,可以在 /etc/default/docker 文件中配置 DOCKER_OPTS=--icc=false 來(lái)禁止它。
訪問(wèn)指定端口
在通過(guò) -icc=false 關(guān)閉網(wǎng)絡(luò)訪問(wèn)后,還可以通過(guò) --link=CONTAINER_NAME:ALIAS 選項(xiàng)來(lái)訪問(wèn)容器的開(kāi)放端口。
例如,在啟動(dòng) Docker 服務(wù)時(shí),可以同時(shí)使用 icc=false --iptables=true 參數(shù)來(lái)關(guān)閉允許相互的網(wǎng)絡(luò)訪問(wèn),并讓 Docker 可以修改系統(tǒng)中的 iptables 規(guī)則。
此時(shí),系統(tǒng)中的 iptables 規(guī)則可能是類似
$ sudo iptables -nL
...
Chain FORWARD (policy ACCEPT)
target prot opt source destination
DROP all -- 0.0.0.0/0 0.0.0.0/0
...之后,啟動(dòng)容器(docker run)時(shí)使用 --link=CONTAINER_NAME:ALIAS 選項(xiàng)。Docker 會(huì)在 iptable 中為 兩個(gè)容器分別添加一條 ACCEPT 規(guī)則,允許相互訪問(wèn)開(kāi)放的端口(取決于 Dockerfile 中的 EXPOSE 行)。
當(dāng)添加了 --link=CONTAINER_NAME:ALIAS 選項(xiàng)后,添加了 iptables 規(guī)則。
$ sudo iptables -nL
...
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 172.17.0.2 172.17.0.3 tcp spt:80
ACCEPT tcp -- 172.17.0.3 172.17.0.2 tcp dpt:80
DROP all -- 0.0.0.0/0 0.0.0.0/0注意:--link=CONTAINER_NAME:ALIAS 中的 CONTAINER_NAME 目前必須是 Docker 分配的名字,或使用 --name 參數(shù)指定的名字。主機(jī)名則不會(huì)被識(shí)別。
網(wǎng)站標(biāo)題:創(chuàng)新互聯(lián)Docker教程:Docker容器訪問(wèn)控制
分享路徑:http://www.5511xx.com/article/coioppj.html


咨詢
建站咨詢
