前言

docker和firewall底层都会操作iptable

但是

docker操作的iptable不会在firewall上留记录

firewall每次重启也会重置iptable端口规则

这就导致了

1.后启动的docker服务,会 ”打洞“,firewall没有允许的端口也会开放出去

2.后启动firewall服务,会清空iptable规则,重置规则影响docker的容器启动

某些场景,服务启动会报错

也可以修改配置解决

Failed to Setup IP tables: Unable to enable SKIP DNAT rule:  (iptables failed: iptables --wait -t nat -I DOCKER -i br-b16a4c094b07 -j RETURN: iptables: No chain/target/match by that name.
 (exit status 1))

解决方法

修改docker配置,不操作iptable


# 修改配置
vim /etc/docker/daemon.json

{
"iptables":false
}
systemctl restart docker

 

# 添加所需端口
#mysql
firewall-cmd --add-port=3306/tcp --permanent
#nacos
firewall-cmd --zone=public --add-port=8848/tcp --permanent
#xxl-job
firewall-cmd --zone=public --add-port=7009/tcp --permanent
#web
firewall-cmd --zone=public --add-port=8000/tcp --permanent
#gateway
firewall-cmd --add-port=8099/tcp --permanent
#redis
firewall-cmd --add-port=6379/tcp --permanent
#swagger
firewall-cmd --add-port=18000/tcp --permanent

firewall-cmd --list-ports

附录(firewall命令操作)

1. 添加(--permanent永久生效,没有此参数重启后失效)
firewall-cmd --zone=public --add-port=80/tcp --permanent
 
2. 重新载入(修改规则后使其生效)
firewall-cmd --reload

3. 查看
firewall-cmd --zone= public --query-port=80/tcp
 
4. 删除
firewall-cmd --zone= public --remove-port=80/tcp --permanent

5.指定IP与端口

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.142.166" port protocol="tcp" port="5432" accept"

6.指定ip段可以访问 

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.3.0/24" port protocol="tcp" port="8200" accept"

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐