无法使用新的 Windows 终端在 WSL2 中启动 Docker

The*_*war 7 docker windows-10 windows-subsystem-for-linux windows-terminal

我最近安装了 WSL2 并从 Microsoft Store 安装了 Ubuntu。当我运行 docker 时使用

Sudo service docker start,我收到以下消息

Cannot connect to the Docker daemon. Is the docker daemon running on this host?
Run Code Online (Sandbox Code Playgroud)

我按照这个答案遵循了步骤并在下面做了

    sudo groupadd docker
sudo usermod -aG docker $(whoami)
Run Code Online (Sandbox Code Playgroud)

但仍然无法启动 docker.. 当检查 Docker 日志时,我可以看到下面

CONNECTING" module=grpc 启动守护进程时出错:初始化网络控制器时出错:获取控制器实例时出错:无法创建 NAT 链 DOCKER:iptables 失败:iptables -t nat -N DOCKER:iptables v1.6.1:无法初始化 iptables 表 nat' : 表不存在(需要insmod吗?)也许iptables或者你的内核需要升级。(退出状态3)`

The*_*war 17

我根据下面的错误尝试了很多步骤

can't initialize iptables table nat': 表不存在(你需要 insmod 吗?)也许 iptables 或你的内核需要升级。(退出状态 3)`

但是以管理员身份启动终端工作。即使你运行

sudo service docker start
Run Code Online (Sandbox Code Playgroud)

终端应以管理员身份启动

  • 天哪,我不敢相信这是我的问题 (4认同)

小智 16

sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
Run Code Online (Sandbox Code Playgroud)

来自https://forums.docker.com/t/failing-to-start-dockerd-failed-to-create-nat-chain-docker/78269


er.*_*yas 7

我可能会迟到,但我遇到了类似的问题,而且解决方案完全不同。
如果有人遇到类似问题,我会在这里发帖。

我面临的问题。

我在我的新机器上设置了 wsl 和 docker。我无法在 wsl2 中运行 dockerd。正如 TheGameiswar 所建议的,如果我以管理员身份运行终端,我可以启动 dockerd,但我仍然无法运行任何图像。

根本原因

默认情况下,wsl 是版本 1 (wsl 1),docker 需要 wsl2。

解决方案

将默认 wsl 版本设置为 2

wsl --set-default-version 2
Run Code Online (Sandbox Code Playgroud)

将安装的发行版设置为 wsl2

wsl --set-version  Ubuntu-20.04 2
Run Code Online (Sandbox Code Playgroud)