firewalld防火墻開(kāi)啟后無(wú)法啟動(dòng)docker問(wèn)題及解決
1、錯(cuò)誤場(chǎng)景和現(xiàn)象
linux開(kāi)啟或重啟防火墻后,創(chuàng)建docker自定義網(wǎng)絡(luò)時(shí)
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 frayernet
報(bào)錯(cuò):[root@VM-16-5-centos home]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 frayernet
Error response from daemon: Failed to Setup IP tables: Unable to enable SKIP DNAT rule: (iptables failed: iptables --wait -t nat -I DOCKER -i br-3d8c7623fb81 -j RETURN: iptables: No chain/target/match by that name.
(exit status 1))
如下:
[root@VM-16-5-centos home]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 frayernet
Error response from daemon: Failed to Setup IP tables: Unable to enable SKIP DNAT rule: (iptables failed: iptables --wait -t nat -I DOCKER -i br-3d8c7623fb81 -j RETURN: iptables: No chain/target/match by that name.
(exit status 1))
2、原因分析
Docker屬于容器化技術(shù),如果宿主機(jī)防火墻的狀態(tài)發(fā)生了改變,Docker就無(wú)法設(shè)置容器的IP了
測(cè)試嘗試啟動(dòng)一個(gè)已經(jīng)存在的mysql容器
[root@VM-16-5-centos conf]# docker start c092
同樣會(huì)出現(xiàn)錯(cuò)誤:
Error response from daemon: driver failed programming external connectivity on endpoint mysql5.7-cdcs-cd (ac43ff409d232efe3eace11b5f2b9d08b8f98c949e7fb43323bc289240560e38): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 3306 -j DNAT --to-destination 172.17.0.3:3306 ! -i docker0: iptables: No chain/target/match by that name.
(exit status 1))
Error: failed to start containers: c092
3、解決辦法
1、輸入命令service docker restart重啟以下Docker即可
[root@VM-16-5-centos home]# service docker restart
出現(xiàn)次問(wèn)題的原因:
irewall的底層是使用iptables進(jìn)行數(shù)據(jù)過(guò)濾,建立在iptables之上,而docker使用iptables來(lái)進(jìn)行網(wǎng)絡(luò)隔離和管理,這可能會(huì)與 Docker 產(chǎn)生沖突。
當(dāng) firewalld 啟動(dòng)或者重啟的時(shí)候,將會(huì)從 iptables 中移除 DOCKER 的規(guī)則,從而影響了 Docker 的正常工作。
也就是說(shuō),firewalld和docker都在操作iptables的規(guī)則,但是docker和firewalld發(fā)生了沖突,導(dǎo)致docker和firewall的設(shè)置的不一致,所以出現(xiàn)了問(wèn)題。
2、讓Docker 繞過(guò)了 firewalld
我們讓docker不修改 iptables 就可以解決問(wèn)題了:
##修改docker配置
vim /etc/docker/daemon.json
# 添加規(guī)則
{
...
"experimental" : true,
"iptables": false
}
# 重啟 docker
systemctl daemon-reload
systemctl restart docker
# 啟動(dòng)容器
docker run -d -p 80:80 nginx
# 查看iptables規(guī)則 發(fā)現(xiàn) docker 沒(méi)有添加規(guī)則
iptables --list
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
CentOS7如何修改Docker鏡像默認(rèn)存儲(chǔ)位置
這篇文章主要介紹了CentOS7如何修改Docker鏡像默認(rèn)存儲(chǔ)位置問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
在Windows系統(tǒng)下安裝docker窗口的配置過(guò)程
相信大家都知道Docker有很多種安裝的選擇,其中支持最好的是Ubuntu系統(tǒng)。而且docker如果想在windows上運(yùn)行必須借助docker-machine,這篇文章將給大家詳細(xì)的介紹在Windows系統(tǒng)上安裝docker窗口的配置過(guò)程,有需要的朋友們可以參考借鑒。2016-10-10
Docker swarm如何通過(guò)docker-compose部署應(yīng)用
這篇文章主要介紹了Docker swarm如何通過(guò)docker-compose部署應(yīng)用問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02
Docker搭建NetBox的實(shí)現(xiàn)示例
NetBox是一個(gè)開(kāi)源的數(shù)據(jù)中心基礎(chǔ)設(shè)施管理和IP地址管理平臺(tái),本文主要介紹了Docker搭建NetBox的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-04-04

