centos7中 firewalld与docker冲突的问题:
原因:
firewall的底层是使用iptables进行数据过滤,建立在iptables之上,而docker使用iptables来进行网络隔离和管理,这可能会与 Docker 产生冲突。当 firewalld 启动或者重启的时候,将会从 iptables 中移除 DOCKER 的规则,从而影响了 Docker 的正常工作。
也就是说,firewalld和docker都在操作iptables的规则,但是docker和firewalld发生了冲突,导致docker和firewall的设置的不一致,所以出现了问题。
解决方法:
让Docker 绕过了 firewalld
我们让docker不修改 iptables 就可以解决问题了:
##修改docker配置
vim /etc/docker/daemon.json
# 添加规则
{
...
"experimental" : true,
"iptables": false
}
# 重启 docker
systemctl daemon-reload
systemctl restart docker
# 启动容器
docker run -d -p 80:80 nginx
# 查看iptables规则 发现 docker 没有添加规则
iptables --list