1、发现问题
突然发现启动(重启)容器的时候报这个错
Error response from daemon: Cannot restart container 容器id: driver failed programming external connectivity on endpoint 容器名 (容器id): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8080 -j DNAT --to-destination 172.17.0.2:8080 ! -i docker0: iptables: No chain/target/match by that name.
容器一直处于创建状态
出现这种情况的时候你就无法再创建容器
2、分析问题
主要是因为在启动docker容器的时候或者做docker配置的时候,还对防火墙设置重新启动等配置
这样会清除docker的相关配置,导致在查询防火墙规则的时候显示不到docker的链
可以通过iptables -L
查询iptables 链
具体原因是你删除了iptables中的链
删除链接的方式有很多种
3、解决问题
既然是firewalld重启导致
而docker重启又会将其注册iptables链回来
那么 我们只需要将其重启docker容器即可解决该问题
systemctl restart docker
再次查询器docker的链iptables -L
或者是通过这条命令查询iptables -t nat -nL