Docker启动失败,提示"iptables: No chain/target/match by that name"

发布时间 2023-11-25 17:09:22作者: wh459086748

一、问题现象

docker容器报错:
docker: Error response from daemon: driver failed programming external connectivity on endpoint etlmysql (12ccdbcef942bef6f32dbfc157dd1b49319ee2df4d68bf7b9a9b9ea88b5bd4fa):  (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 3306 -j DNAT --to-destination 172.17.0.2:3306 ! -i docker0: iptables: No chain/target/match by that name. (exit status 1)).

二、解决思路

docker ps -a 查看是否还有12ccdbcef的容器。
发现已经被删除 。
进行百度
https://blog.csdn.net/qq_40822132/article/details/131892842
发现其中,这个文章中的原因,很符合我的现象 。想起来前几天我是关闭了firewalld的。
最后按照提示重启了docker,发现可以啦。

原因:在我们启动了Docker后,我们再对防火墙firewalld进行操作,就会发生上述报错,

详细原因:docker服务启动时定义的自定义链DOCKER,当 centos7 firewall 被清掉时,
firewall的底层是使用iptables进行数据过滤,建立在iptables之上,这可能会与 Docker 产生冲突。
当 firewalld 启动或者重启的时候,将会从 iptables 中移除 DOCKER 的规则,从而影响了 Docker 的正常工作。
当你使用的是 Systemd 的时候, firewalld 会在 Docker 之前启动,但是如果你在 Docker 启动之后操作 firewalld ,你就需要重启 Docker 进程了。

解决办法:重启docker服务及可重新生成自定义链DOCKER
systemctl restart docker