Centos7 firewall和docker沖突問題及解決過程
本文只是我對問題的記錄,只能用作參考,不能說明問題,請謹(jǐn)慎使用
系統(tǒng)環(huán)境
- 系統(tǒng):Centos7
- 防火墻工具:firewalld
- Docker容器:docker容器使用docker默認(rèn)的網(wǎng)橋(bridge),進(jìn)行了端口映射
問題描述
在系統(tǒng)防火墻firewalld關(guān)閉的狀態(tài)下,啟動了一個docker容器,然后啟動了防火墻,發(fā)現(xiàn)docker容器中的服務(wù)不能訪問,然后使用firewall-cmd --zone=public --add-port=8000/tcp --permanent和firewall-cmd --reload命令開放了相應(yīng)端口,發(fā)現(xiàn)仍舊不能訪問服務(wù),隨即關(guān)閉防火墻,發(fā)現(xiàn)訪問正常。
問題排查
經(jīng)過查找資料,發(fā)現(xiàn)出現(xiàn)此問題的原因是
firewall的底層是使用iptables進(jìn)行數(shù)據(jù)過濾,建立在iptables之上,而docker使用iptables來進(jìn)行網(wǎng)絡(luò)隔離和管理,這可能會與 Docker 產(chǎn)生沖突。
當(dāng) firewalld 啟動或者重啟的時候,將會從 iptables 中移除 DOCKER 的規(guī)則,從而影響了 Docker 的正常工作。
也就是說,firewalld和docker都在操作iptables的規(guī)則,但是docker和firewalld發(fā)生了沖突,導(dǎo)致docker和firewall的設(shè)置的不一致,所以出現(xiàn)了問題。
網(wǎng)上有大概三種解決方案:
- 關(guān)閉防火墻使用(不可?。?/li>
- 使用iptables來代替firewalld
- 關(guān)閉docker服務(wù),然后重啟firewalld,然后啟動docker服務(wù)(經(jīng)測試不可用)
如果是測試環(huán)境或者開發(fā)環(huán)境,關(guān)閉防火墻是一個簡便的方法,但是不推薦使用
如果熟悉iptables,用iptables來代理firewalld也不錯
但是,firewall的使用起來比較方便,所以傾向于使用firewalld,但是方法3,按照順序進(jìn)行重啟之后問題不能解決,于是想到了另一個解決辦法:
解決辦法
先啟動防火墻,或者重啟防火墻,然后重啟docker服務(wù),接著,刪除有問題的docker容器,接著重新創(chuàng)建一個docker容器,問題解決
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Apache運行模式之standalone和inetd模式介紹
這篇文章主要介紹了Apache運行模式之standalone和inetd模式介紹,本文講解了ServerType這個配置參數(shù),ServerType這個配置選項指定如何運行Apache,需要的朋友可以參考下2015-06-06
Xshell7遠(yuǎn)程連接失敗(connection failed)的問題解決
本文主要介紹了Xshell7遠(yuǎn)程連接失敗(connection failed)的問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08

