Ubuntu 系统 Docker 启动失败(iptables/nf\_tables)

Ubuntu 系统 Docker 启动失败(iptables/nf_tables)问题排查与修复详解

在 Ubuntu 系统中安装 Docker 后,有部分用户在启动 Docker 服务时遇到如下报错:

bash 复制代码
Failed to start Docker Application Container Engine.
failed to create NAT chain DOCKER: iptables v1.8.7 (nf_tables): Could not fetch rule set generation id: Invalid argument

本文将详细解释该问题的原因,并提供完整的修复方案。


问题现象

使用以下命令启动 Docker:

bash 复制代码
sudo systemctl start docker

执行后,使用以下命令查看docker运行情况

bash 复制代码
sudo systemctl status docker

发现状态为 failed

使用以下命令查看详细错误日志

bash 复制代码
sudo journalctl -u docker.service --no-pager --since "10 minutes ago"

伴随日志提示:

复制代码
failed to create NAT chain DOCKER: iptables v1.8.7 (nf_tables): Could not fetch rule set generation id: Invalid argument

这是 Docker 在使用默认 iptables-nft 后端时,与内核的 nf_tables 实现存在兼容性问题,无法创建 NAT 表中用于容器网络的 DOCKER chain。


原因分析

Ubuntu 从 20.04 起,iptables 默认使用 nf_tables 模式,而 Docker 更稳定地支持 iptables-legacy 模式。

这就导致 Docker 启动时无法正确配置网络桥接规则,从而守护进程失败退出。


解决方案:切换为 iptables-legacy 模式

1. 确保系统已安装 iptables(非 nft 工具包)

bash 复制代码
sudo apt install iptables

2. 执行切换命令(无需单独安装 iptables-legacy 包)

bash 复制代码
sudo update-alternatives --config iptables

系统会提示你可选项,例如:

选择带有 iptables-legacy 的序号(如 1),然后回车。

同理,切换 IPv6:

bash 复制代码
sudo update-alternatives --config ip6tables

3. 若缺少 iptables-legacy 可用项,可软链接模拟:

bash 复制代码
sudo ln -sf /usr/sbin/iptables /usr/sbin/iptables-legacy
sudo ln -sf /usr/sbin/ip6tables /usr/sbin/ip6tables-legacy

sudo update-alternatives --install /usr/sbin/iptables iptables /usr/sbin/iptables-legacy 100
sudo update-alternatives --install /usr/sbin/ip6tables ip6tables /usr/sbin/ip6tables-legacy 100

然后再次运行 --config 命令进行选择。

4. 重启 Docker 服务

bash 复制代码
sudo systemctl daemon-reexec
sudo systemctl restart docker

5. 验证是否恢复正常

bash 复制代码
docker info
docker run hello-world

如无报错即修复成功。


相关推荐
j_xxx404_3 小时前
Linux:静态链接与动态链接深度解析
linux·运维·服务器·c++·人工智能
_只道当时是寻常4 小时前
【Codex】Ubuntu 安装 Codex CLI 并解决 Clash 代理与账号认证问题
linux·ubuntu·chatgpt
brucelee1865 小时前
Claude Code 安装教程(Windows / Linux / macOS)
linux·windows·macos
jsons15 小时前
给每台虚拟机设置独立控制台密码
linux·运维·服务器
皮皮冰燃6 小时前
docker-18-WSL中安装docker并部署flask服务
docker·容器·flask
嵌入式×边缘AI:打怪升级日志6 小时前
全志T113 Tina-SDK 配套工具链开发应用(从Makefile到CMake再到Autotools)
linux
嵌入式×边缘AI:打怪升级日志6 小时前
全志T113嵌入式Linux开发环境搭建(VMware + Ubuntu 18.04)详细步骤
linux·ubuntu
少年白char6 小时前
整理上万首音乐后的完整工作流:下载、刮削、播放与避坑指南
docker·nas·musictag·音乐刮削·音乐标签
云栖梦泽7 小时前
Linux内核与驱动:14.SPI子系统
linux·运维·服务器·c++
Frank_refuel7 小时前
终端环境下:Ubuntu 22.04.1 安装 MySQL 数据库
数据库·mysql·ubuntu