冲突原因:
如果同时启用了firewalld和docker服务,他们都会对iptables里面的转发链写入规则,firewalld每次启动或者重启都会强制覆盖docker的转发链,同时,docker也会通过更高优先级的策略使firewalld里面配置的条目失效。
具体冲突的原因见Docker官方文档:https://docs.docker.com/network/iptables/
解决方案:
方案1:
当启动firewalld出现冲突的时候,首先重启firewalld,然后重启docker,注意顺序不可以反过来。
方案2:
仅限于Docker版本大于等于 20.10.0
Docker在最新的版本里自动创建了一个名为docker的 firewalld zone,并把它的所有网络接口(包括docker0)加入到了这个区域里面,执行下面的命令将你的docker0接口移到docker区域。
firewall-cmd --zone=trusted --remove-interface=docker0 --permanent
firewall-cmd --reload

firewalld和docker在运行时会争夺iptables的控制,导致规则被覆盖。Docker文档指出,firewalld启动会重置转发链,而docker的规则有更高优先级。对于Docker20.10.0及以上版本,可以通过将docker0接口移至trusted区域来解决。重启服务的顺序(先firewalld后docker)或更新Docker配置是两种可行的解决方案。
1279

被折叠的 条评论
为什么被折叠?



