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

