如何在启用firewalld防火墙
首先docker服务默认是使用iptable规则进行端口管理,所以firewalld启用后会跟iptables冲突。
1、禁用docker使用iptables管理,编辑/etc/docker/daemon.json
在{} 中添加一个配置 “iptables”: false

vim /etc/docker/daemon.json

2、添加好后重启docker

systemctl daemon-reload
systemctl restart docker

3、然后重启防火墙

systemctl restart firewalld

一般情况下,这样docker的端口就回被firewalld管理,开放端口出去就需要使用firewall-cmd命令添加
如果出现docker内部访问不到宿主机的情况下

#将docker网桥及自建网络的地址全部加入firewall防火墙放开
ip addr | grep br-
ip addr | grep docker0

将docker网桥及自建网络的地址全部加入firewall防火墙放开

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="172.17.0.0/16" accept"

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="172.168.0.0/16" accept"

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="172.31.0.0/16" accept"

firewall-cmd --reload

然后去验证容器内部是否互通。
其他问题:
1、如果上面的都操作了还出现容器无法访问外部网络的情况。执行以下操作。


#打开IP地址伪装
firewall-cmd --zone=public --add-masquerade --permanent
#添加内核配置允许内核转发
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf  
#使内核配置生效
sysctl  -p
#重启一下  防火墙和docker 
systemctl restart firewalld &&  systemctl restart docker
#如果容器能互相访问了,也能访问宿主机了,但是访问不了外部其他机器,在执行一下下方命令。
#允许docker的出站流量
iptables -P FORWARD ACCEPT

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐