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。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐