firewalld防火墙开启后无法启动docker问题及解决

 更新时间:2025年12月13日 14:23:45   作者:西西o  
文章描述了在Linux上开启或重启防火墙后,创建docker自定义网络时出现的错误,原因是firewalld和docker在操作iptables时发生了冲突,文章提供了两种解决办法:1. 重启Docker服务;2. 让Docker绕过firewalld

1、错误场景和现象

linux开启或重启防火墙后,创建docker自定义网络时

docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 frayernet

报错:[root@VM-16-5-centos home]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 frayernet
Error response from daemon: Failed to Setup IP tables: Unable to enable SKIP DNAT rule:  (iptables failed: iptables --wait -t nat -I DOCKER -i br-3d8c7623fb81 -j RETURN: iptables: No chain/target/match by that name.
 (exit status 1))

如下:

[root@VM-16-5-centos home]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 frayernet
Error response from daemon: Failed to Setup IP tables: Unable to enable SKIP DNAT rule:  (iptables failed: iptables --wait -t nat -I DOCKER -i br-3d8c7623fb81 -j RETURN: iptables: No chain/target/match by that name.
 (exit status 1))

2、原因分析

Docker属于容器化技术,如果宿主机防火墙的状态发生了改变,Docker就无法设置容器的IP了

测试尝试启动一个已经存在的mysql容器

[root@VM-16-5-centos conf]# docker start c092

同样会出现错误:

Error response from daemon: driver failed programming external connectivity on endpoint mysql5.7-cdcs-cd (ac43ff409d232efe3eace11b5f2b9d08b8f98c949e7fb43323bc289240560e38):  (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 3306 -j DNAT --to-destination 172.17.0.3:3306 ! -i docker0: iptables: No chain/target/match by that name.
 (exit status 1))
Error: failed to start containers: c092

3、解决办法

1、输入命令service docker restart重启以下Docker即可

[root@VM-16-5-centos home]# service docker restart

出现次问题的原因:

irewall的底层是使用iptables进行数据过滤,建立在iptables之上,而docker使用iptables来进行网络隔离和管理,这可能会与 Docker 产生冲突。

当 firewalld 启动或者重启的时候,将会从 iptables 中移除 DOCKER 的规则,从而影响了 Docker 的正常工作。

也就是说,firewalld和docker都在操作iptables的规则,但是docker和firewalld发生了冲突,导致docker和firewall的设置的不一致,所以出现了问题。

2、让Docker 绕过了 firewalld

我们让docker不修改 iptables 就可以解决问题了:

##修改docker配置
vim /etc/docker/daemon.json
 
# 添加规则
{
...
"experimental" : true,
"iptables": false
}
 
# 重启 docker
systemctl daemon-reload
systemctl restart docker
 
# 启动容器
docker run -d -p 80:80 nginx
# 查看iptables规则 发现 docker 没有添加规则
iptables --list
 

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Docker镜像重命名的实现方法

    Docker镜像重命名的实现方法

    本文主要介绍了Docker镜像重命名的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • CentOS7如何修改Docker镜像默认存储位置

    CentOS7如何修改Docker镜像默认存储位置

    这篇文章主要介绍了CentOS7如何修改Docker镜像默认存储位置问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • centos 下docker 安装方法

    centos 下docker 安装方法

    这篇文章主要介绍了centos 下docker 安装方法,本文只介绍比较简易的安装方式,需要的朋友可以参考下
    2018-10-10
  • 在Windows系统下安装docker窗口的配置过程

    在Windows系统下安装docker窗口的配置过程

    相信大家都知道Docker有很多种安装的选择,其中支持最好的是Ubuntu系统。而且docker如果想在windows上运行必须借助docker-machine,这篇文章将给大家详细的介绍在Windows系统上安装docker窗口的配置过程,有需要的朋友们可以参考借鉴。
    2016-10-10
  • docker安装配置nginx的流程

    docker安装配置nginx的流程

    本文给大家介绍docker安装配置nginx的流程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-09-09
  • Docker swarm如何通过docker-compose部署应用

    Docker swarm如何通过docker-compose部署应用

    这篇文章主要介绍了Docker swarm如何通过docker-compose部署应用问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • Docker push镜像失败解决方法

    Docker push镜像失败解决方法

    这篇文章主要介绍了Docker push镜像失败解决方法的相关资料,这里对解决push 镜像失败提供了解决方案,需要的朋友可以参考下
    2016-12-12
  • docker搭建etcd集群方式 bitnami/etcd

    docker搭建etcd集群方式 bitnami/etcd

    这篇文章主要介绍了docker搭建etcd集群方式 bitnami/etcd,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Docker-compose离线安装全过程

    Docker-compose离线安装全过程

    下载docker-compose-Linux-x86_64并上传至CentOS7的/usr/local/bin目录,重命名为docker-compose,添加执行权限,最后通过版本命令测试安装是否成功
    2025-08-08
  • Docker搭建NetBox的实现示例

    Docker搭建NetBox的实现示例

    NetBox是一个开源的数据中心基础设施管理和IP地址管理平台,本文主要介绍了Docker搭建NetBox的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-04-04

最新评论