WSL 安装Docker Engine启动报错 can’t initialize iptables table `nat’: Table does not exist


Windows Subsystem for Linux (WSL) 2是由微软构建的完整Linux内核,它可以让Linux发行版在不管理虚拟机的情况下运行。通过在WSL 2上运行Docker Desktop,用户可以利用Linux工作空间,避免同时维护Linux和Windows的构建脚本

在WSL上安装Docker时,建议将WSL直接升级为WSL2,可以通过下面2中方式升级:
一下操作,一定使用管理员模式打开 PowerShell

  1. 本机已安装WSL,首先要确定时WSL1还是WSL2
    wsl -l -v

    以下结果表明为安装的WSL1,可以通过以下方式进行转换:

     NAME      STATE           VERSION
    * Ubuntu    Stopped         1

    重新设置版本号:

    wsl --set-version Ubuntu 2

    如果提示:需要升级内核,可以通过下面的方式进行升级

    wsl --update --web-download

    正常执行结果为:

    正在下载: 适用于 Linux 的 Windows 子系统
    正在安装: 适用于 Linux 的 Windows 子系统
    已安装 适用于 Linux 的 Windows 子系统。

然后重新执行设置版本号操作;
可以直接通过下面的命令设置默认wsl为wsl2

wsl --set-default-version 2

wsl1安装docker Engine后,启动时会报错:

failed to start daemon: Error initializing network controller: error obtaining controller instance: failed to create NAT chain DOCKER: iptables failed: iptables -t nat -N DOCKER: iptables v1.8.7 (legacy): can’t initialize iptables table `nat’: Table does not exist (do you need to insmod?)

升级wsl1为wsl2后,没有再出现此问题。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注