docker容器提示:-i docker0: iptables: No chain/target/match

你这条报错在 CentOS 7 上非常常见,原因多半是——
firewalld 或 systemd 重载后清空了
iptables nat表中的DOCKER链,导致 Docker 端口映射失败。
1.问题回顾
docker拉起容器提示iptable链无法创建(核查对应iptable内核模块是否加载?)
env
- centos7
日志中提到:
iptables: No chain/target/match by that name.
(driver failed programming external connectivity on endpoint ...)
意思是 Docker 想往 nat 表中写规则时,找不到 DOCKER 链(因为被删了)。
2.CentOS 7 排查与修复步骤
2.1检查 Docker 自带链是否存在
1 | sudo iptables -t nat -L -n |
如果输出中没有类似:
Chain DOCKER (2 references)
target prot opt source destination
那就确认链确实丢失。
2.2检查 firewalld 状态
CentOS 7 默认使用 firewalld 管理 iptables,很多人重载后清空了 Docker 链。
1 | sudo systemctl status firewalld |
如果 firewalld 是 active 状态,可以:
1
2sudo systemctl stop firewalld
sudo systemctl disable firewalld然后让 Docker 自己接管 iptables。
或者保留 firewalld,但让它别清空 Docker 链:
编辑配置:1
sudo vi /etc/firewalld/firewalld.conf
改成:
CleanupOnExit=no然后重启:
1
sudo systemctl restart firewalld
2.3检查内核模块
1 | sudo lsmod | grep -E 'br_netfilter|ip_tables|xt_nat' |
如未加载则补齐:
1 | sudo modprobe br_netfilter |
2.4重新加载 Docker 网络环境
重启 Docker:
1 | sudo systemctl restart docker |
然后再次验证:
1 | sudo iptables -t nat -L -n | grep DOCKER |
2.5启动容器验证
1 | docker start nexus |
应看到:
0.0.0.0:6106->8081/tcp
3.Docker 端口映射原理

只要
DOCKER链缺失,上述DNAT流转就中断。