docker与firewalld冲突解决

文章介绍了当firewalld与Docker同时使用时可能出现的冲突,即firewalld重启会移除Docker的iptables规则。为解决此问题,建议禁用firewalld对Docker的管理,修改docker配置以避免使用iptables,并通过firewall-cmd命令控制端口访问。同时,若需容器访问外界IP,需开启firewalld的NAT转发功能,并配置相应的防火墙规则。

firewall的底层是使用iptables进行数据过滤,建立在iptables之上,而docker使用iptables来进行网络隔离和管理,这可能会与 Docker 产生冲突。当 firewalld 启动或者重启的时候,将会从 iptables 中移除 DOCKER 的规则,从而影响了 Docker 的正常工作。 同理,重启docker或者docker安装在后(或 docker容器安装在后),也会清理firewalld的规则

iptables -L 查询iptables 链

解决方法:

让Docker 绕过了 firewalld

####### 1、先关闭防火墙 #######
systemctl stop firewalld

####### 2、修改docker配置 #######
#修改docker配置
vim /etc/docker/daemon.json
#添加规则
{
...
"iptables": false
}
#重启docker
systemctl daemon-reload
systemctl restart docker

####### 3、开启或重启防火墙 #######
systemctl restart firewalld
 
####### 4、再次重启docker #######
systemctl restart docker

####### 此时docker -p的服务的端口能本地127.0.0.1访问 #######
####### 以后就可以通过firewall控制对外端口是否可用了(firewall-cmd 命令) #######

firewall-cmd命令可参考:防火墙firewall-cmd

【重要一】
绕过iptables之后,有个弊端:容器内部无法访问外界IP。如果需要访问,那么打开firewalld防火墙,且开启NAT转发功能,详细步骤如下:

此外,建议firewall防火墙开启NAT转发功能,解决阻止docker容器访问外界IP
https://blog.csdn.net/liyanggyang/article/details/128838350

【重要二】
在打开firewalld防火墙,且开启NAT转发功能后,允许容器访问外界IP:
1、容器访问本宿主机(物理/虚拟机)IP,本宿主机的防火墙检测到的IP是容器IP, 所以本机防火墙需要放行docker网段(可见 firewall-cmd命令可参考
2、访问其他外界物理/虚拟机,外界物理/虚拟机检测到的IP是容器所在宿主机IP。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值