docker运行报错docker0: iptables: No chain/target/match by that name.

本文详细记录了解决Docker与iptables冲突的问题过程。在新服务器上先安装Docker后安装iptables导致Docker运行报错,通过停止Docker服务、保存iptables配置、重启Docker并设置开机启动,最终解决了该问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

docker运行报错docker0: iptables: No chain/target/match by that name.

  最近在一个新的服务器上装服务,没有安装iptables ,后来安装了iptables 之后,忽然发现我的docker 不能运行了。
  注意,可能别人的不行,我这个原因是,开始在新服务器上没有安装iptables ,先安装的docker ,后来才停用默认的firewall ,安装了iptables,就出现了这样的问题。其他原因,我不知道这方法可行不?先看错误:
  运行时报出了以下错误:

启动docker服务报错
Error response from daemon: No such container: yn-userservice-30000
26126ca87430b74c3987817492cc890e72c36e2fec10d807e362a12f22365160
/usr/bin/docker-current: Error response from daemon: driver failed programming external
 connectivity on endpoint yn-userservice-30000 (5d083ef51f932ac24936713ab3bc1cece9d47feabf4a916cf5da12a4fb2a122a):  
 (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 30000 -j DNAT --to-
 destination 172.17.0.2:30000 ! -i docker0: iptables: No chain/target/match by that name.

后来在网上找了下,发现解决办法很简单,如下:

1、停止docker服务

  输入如下命令停止docker服务

systemctl stop docker  或者service docker stop

  停止成功的话,再输入docker ps 就会提示出下边的话:

Cannot connect to the Docker daemon. Is the docker daemon running on this host?
2、保存 iptables

  输入如下命令:

iptables-save >  /etc/sysconfig/iptables

  我发现 防火墙的配置文件/etc/sysconfig/iptables前后文件如下,当然我是看不懂了,我也就会设置个入站端口
  保存之前文件内容:

# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 10001 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 10002 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 10003 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 10004 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

  保存之后的文件内容:

# Generated by iptables-save v1.4.21 on Sat Nov 24 13:53:13 2018
*nat
:PREROUTING ACCEPT [261:18558]
:INPUT ACCEPT [17:969]
:OUTPUT ACCEPT [4:304]
:POSTROUTING ACCEPT [4:304]
COMMIT
# Completed on Sat Nov 24 13:53:13 2018
# Generated by iptables-save v1.4.21 on Sat Nov 24 13:53:13 2018
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1246:135222]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 10001 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 10002 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 10003 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 10004 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Sat Nov 24 13:53:13 2018

3、启动docker服务

  保存了iptables后,可以重新启动docker了。输入如下命令:

systemctl start docker 或者service docker  start
4、将docker设置为开机启动

  设置过这个就不需要再设置了

systemctl enable docker
5、启动容器

  最后启动容器,发现不再报错了。

docker start 容器名字
<think>我们正在解决一个关于Dockeriptables的错误:`iptables:Nochain/target/matchbythatname`。根据引用[1][2][3][4][5],这个错误通常发生在Docker尝试配置iptables规则时,找不到预期的链、目标或匹配项。引用[4]提到,重启Docker服务通常可以解决这个问题,因为重启会重新加载网络配置和iptables规则。但是,如果重启Docker不能解决问题,我们可能需要更深入地检查iptables配置。步骤:1.首先,尝试重启Docker服务(引用[4]):```bashsudosystemctlrestartdocker```2.如果重启后问题仍然存在,检查iptables中是否存在DOCKER链(在nat表中):```bashsudoiptables-tnat-L```如果没有看到DOCKER链,那么我们需要重新初始化Dockeriptables规则。3.重新初始化Dockeriptables规则(注意:这将会清除现有的Docker网络规则,但不会影响非Docker的规则):```bashsudosystemctlstopdockersudoiptables-tnat-Fsudosystemctlstartdocker```注意:`-F`参数会清空nat表中所有链的规则。如果你在nat表中有其他重要的规则,请谨慎使用此命令。4.如果上述步骤无效,可以尝试完全重置iptables(注意:这将会清除所有iptables规则,包括非Docker的规则,请确保你有权限且可以接受此操作):```bashsudoiptables-Fsudoiptables-tnat-Fsudoiptables-tmangle-Fsudoiptables-X#删除用户自定义链```然后重启Docker:```bashsudosystemctlrestartdocker```5.如果问题仍然存在,检查是否安装了其他可能影响iptables的软件(如防火墙软件),并暂时禁用它们。6.引用[5]提到,在中小规模业务中,可能不需要使用容器方式。因此,如果问题持续存在且难以解决,可能需要考虑不使用Docker。注意:操作iptables需要root权限,且操作不当可能导致网络中断,请在操作前确保了解影响。根据引用[4],重启Docker是解决此问题的常见方法,因此建议首先尝试此方法。如果用户已经尝试重启Docker但未成功,则按照上述步骤逐步排查。下面将按照用户要求,生成相关问题。</think>### iptables "No chain/target/match by that name" 解决方案 当出现 `iptables: No chain/target/match by that name` 错误时,通常表示 iptables 规则链缺失或配置不一致。以下是系统性的解决方法: #### 1. **重启 Docker 服务**(最常用方案) ```bash sudo systemctl restart docker ``` 此操作会重新加载 iptables 规则链,解决 90% 以上的此类报错[^4]。 #### 2. **检查并恢复 DOCKER 链** ```bash # 查看 nat 表是否存在 DOCKER 链 sudo iptables -t nat -L # 若缺失则手动创建 sudo iptables -t nat -N DOCKER ``` #### 3. **重置 iptables 规则** ```bash sudo iptables -F sudo iptables -t nat -F sudo iptables -t mangle -F sudo iptables -X # 删除自定义链 sudo systemctl restart docker ``` ⚠️ 注意:此操作会清除所有防火墙规则,需谨慎使用。 #### 4. **检查内核模块加载** ```bash # 确认必要模块已加载 lsmod | grep -E 'nf_nat|nf_conntrack|br_netfilter' # 加载缺失模块 sudo modprobe nf_nat sudo modprobe nf_conntrack sudo modprobe br_netfilter ``` #### 5. **持久化 iptables 配置** ```bash # 安装持久化工具 sudo apt install iptables-persistent # 保存当前规则 sudo netfilter-persistent save ``` #### 6. **检查 Docker 网络配置** ```bash # 查看 Docker 网络状态 docker network ls docker network inspect bridge # 重置 Docker 网络 docker network prune sudo systemctl restart docker ``` #### 根本原因分析: 此错误通常由以下情况触发: - Docker 服务异常终止导致规则链残留 - 手动修改 iptables 规则后未同步 Docker 配置 - 系统重启后内核模块未自动加载 - 防火墙软件(如 ufw/firewalld)与 Docker 冲突 > **操作建议**:优先尝试方案1(重启Docker),若无效再逐步执行后续方案。生产环境中建议使用方案5持久化配置防止重启失效[^4][^3]。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

茁壮成长的凌大大

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值