docker: Error response from daemon: driver failed programming external connectivity on endpoint awesome_pasteur (...): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8080 -j DNAT --to-destination 172.17.0.3:8800 ! -i docker0: iptables: No chain/target/match by that name.
主要看这里:iptables: No chain/target/match by that name. 看提示是和防火墙有关,难道是网络重启把防火墙打开了?之前我记得防火墙是开的,但是呢通过 firewall-cmd 命令将一些端口进行了单独处理。
于是我使用命令关闭防火墙。我这里是Centos7, systemctl stop firewalld起作用。
systemctl stop firewalld
systemctl status firewalld
发现还是不行,最后是使用 service docker restart 把docker 重启了一下,业务才正常,后来我自己再重新试了一下。发现只要使用 service network restart 重启网络之后,docker下的业务就是会出问题。只需要使用 service docker restart 或 systemctl restart docker 重启 docker 就行。
看来网络重启操作不会导致 docker 里的 iptables 更新。所以启动Docker后对防火墙 firewalld 进行的操作,会导致上述报错。深入一点的原因就是当 firewalld 启动或者重启的时候,将会从 iptables 中移除 DOCKER 的规则,从而影响了 Docker 的正常运行。解决办法也是 systemctl restart docker 重启 docker 服务重新生成自定义链 DOCKER。
本文地址:http://47.93.183.36/article/1284.html 未经许可,不得转载. 手机访问本页请扫描右下方二维码.
手机扫码直接打开本页面 |