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)文章
Docker利用busybox創(chuàng)建基礎(chǔ)鏡像(base image)
今天小編就為大家分享一篇關(guān)于Docker利用busybox創(chuàng)建基礎(chǔ)鏡像(base image),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12
Docker compose安裝部署創(chuàng)建自定義網(wǎng)絡(luò)使用舉例
這篇文章主要為大家介紹了Docker compose安裝部署創(chuàng)建自定義網(wǎng)絡(luò)使用舉例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
docker安裝git教程,解決clone地址端口錯(cuò)誤的問(wèn)題
這篇文章主要介紹了docker安裝git教程,解決clone地址端口錯(cuò)誤的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-06-06
如何使用Docker部署briefing視頻聊天系統(tǒng)
briefing是一個(gè)開(kāi)源的、安全的直接視頻群聊平臺(tái),這篇文章主要介紹了使用Docker部署briefing視頻聊天系統(tǒng)的詳細(xì)過(guò)程,需要的朋友可以參考下2024-01-01

