firewall的底层是使用iptables进行数据过滤,建立在iptables之上,而docker使用iptables来进行网络隔离和管理,这可能会与 Docker 产生冲突。当 firewalld 启动或者重启的时候,将会从 iptables 中移除 DOCKER 的规则,从而影响了 Docker 的正常工作。
iptables -L 查询iptables 链
解决方法:
让Docker 绕过了 firewalld
####### 1、先关闭防火墙 #######
systemctl stop firewalld
####### 2、修改docker配置 #######
#修改docker配置
vim /etc/docker/daemon.json
#添加规则
{
...
"experimental" : true,
"iptables": false
}
#重启docker
systemctl daemon-reload
systemctl restart docker
####### 3、开启或重启防火墙 #######
systemctl restart firewalld
####### 4、再次重启docker #######
systemctl restart docker
####### 此时docker服务的端口只能本地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文章来源:https://www.toymoban.com/news/detail-736524.html
【重要二】
在打开firewalld防火墙,且开启NAT转发功能后,允许容器访问外界IP:
1、容器访问本宿主机(物理/虚拟机)IP,本宿主机的防火墙检测到的IP是容器IP, 所以本机防火墙需要放行docker网段(可见“firewall-cmd命令可参考”)
2、访问其他外界物理/虚拟机,外界物理/虚拟机检测到的IP是容器所在宿主机IP。文章来源地址https://www.toymoban.com/news/detail-736524.html
到了这里,关于docker与firewalld冲突解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!