Docker 运行 始终冻结或 WSL Ubuntu 发行版在等待生命周期服务器时停止

Docker run always Frozen or WSL Ubuntu distro stopped while waiting for Lifecycle server

运行 在 Insider Preview 程序中更新到最新版本的 Windows 后出现此错误。我注意到在应用此 Windows 更新后,我的 Hyper-V 管理工具和 Hyper-V 平台的 Hyper-V 设置现在已启用。我不记得这些是否在更新之前都打开了。

Windows

错误

WSL distro stopped while waiting for Lifecycle server.
  >Stdout:

  >Stderr:
2020/08/08 20:51:59 resolving /mnt/host/c/Program Files/Docker/Docker/resources/wsl/docker-wsl-cli.iso...
2020/08/08 20:51:59 copying...
Error: mounting wslCLIDest: open /mnt/host/wsl/docker-desktop-data/isocache/c6c2ec214a20124f40a56bbc09f0f7f8fdc9a217881c0ff725af2e476e4b3734.iso: input/output error
2020/08/08 20:51:59 open /mnt/host/wsl/docker-desktop-data/isocache/c6c2ec214a20124f40a56bbc09f0f7f8fdc9a217881c0ff725af2e476e4b3734.iso: input/output error
mounting wslCLIDest
main.doRun
    /go/src/github.com/docker/pinata/linuxkit/pkg/wsl-bootstrap/main.go:224
main.run.func1
    /go/src/github.com/docker/pinata/linuxkit/pkg/wsl-bootstrap/main.go:83
github.com/docker/pinata/vendor/github.com/spf13/cobra.(*Command).execute
    /go/src/github.com/docker/pinata/vendor/github.com/spf13/cobra/command.go:762
github.com/docker/pinata/vendor/github.com/spf13/cobra.(*Command).ExecuteC
    /go/src/github.com/docker/pinata/vendor/github.com/spf13/cobra/command.go:852
github.com/docker/pinata/vendor/github.com/spf13/cobra.(*Command).Execute
    /go/src/github.com/docker/pinata/vendor/github.com/spf13/cobra/command.go:800
main.main
    /go/src/github.com/docker/pinata/linuxkit/pkg/wsl-bootstrap/main.go:25
runtime.main
    /usr/local/go/src/runtime/proc.go:203
runtime.goexit
    /usr/local/go/src/runtime/asm_amd64.s:1357

WSL 规范

usr@win:/mnt/c/$ neofetch
            .-/+oossssoo+/-.               usr@win
        `:+ssssssssssssssssss+:`           ----------------
      -+ssssssssssssssssssyyssss+-         OS: Ubuntu 20.04 LTS on Windows 10 x86_64
    .ossssssssssssssssssdMMMNysssso.       Kernel: 4.19.104-microsoft-standard
   /ssssssssssshdmmNNmmyNMMMMhssssss/      Uptime: 3 mins
  +ssssssssshmydMMMMMMMNddddyssssssss+     Packages: 640 (dpkg)
 /sssssssshNMMMyhhyyyyhmNMMMNhssssssss/    Shell: bash 5.0.16
.ssssssssdMMMNhsssssssssshNMMMdssssssss.   Terminal: /dev/pts/1
+sssshhhyNMMNyssssssssssssyNMMMysssssss+   CPU: Intel i7-6700K (8) @ 4.007GHz
ossyNMMMNyMMhsssssssssssssshmmmhssssssso   GPU: 9542:00:00.0 Microsoft Corporation Device 008e
ossyNMMMNyMMhsssssssssssssshmmmhssssssso   Memory: 497MiB / 7959MiB
+sssshhhyNMMNyssssssssssssyNMMMysssssss+
.ssssssssdMMMNhsssssssssshNMMMdssssssss.
 /sssssssshNMMMyhhyyyyhdNMMMNhssssssss/
  +sssssssssdmydMMMMMMMMddddyssssssss+
   /ssssssssssshdmNNNNmyNMMMMhssssss/
    .ossssssssssssssssssdMMMNysssso.
      -+sssssssssssssssssyyyssss+-
        `:+ssssssssssssssssss+:`
            .-/+oossssoo+/-.

我能够解决这个问题。按照这些步骤进行操作,它也可能会为您修复它,这是我在以下位置尝试过的顺序:

  1. 删除 Windows WSL 发行版上的 Ubuntu,然后从 Microsoft Store 重新安装。
  2. 使用 Docker 桌面应用程序清理/清除数据。
  3. 使用 Docker 桌面应用程序将 Docker 重置为出厂默认设置。
  4. 禁用 Hyper-V 管理工具和 Hyper-V 平台并重新启动 Windows <-------- ✔ 真正修复我的情况。
  5. 运行 Docker 作为超级用户执行命令 sudo su <-------- 如果第 4 步不适合您,您可能需要执行此操作。

将内存更新为 1G 解决了我的问题。按照以下步骤操作:

打开WindowsTerminal/CMD/PowerShell和运行以下命令:

#turn off all wsl instances such as docker-desktop
wsl --shutdown
notepad "$env:USERPROFILE/.wslconfig"

记事本打开并创建一个新文件 .wslconfig。(如果这是第一次)

使用记事本编辑 .wslconfig 文件并记下这些设置:

[wsl2]
memory=1GB  

对于 Windows 在重新安装和其他东西之前,只是 reset docker to factory defaults。此后大部分时间都在 windows env 上工作。

就我而言,WSL 有时在 windows 启动后未挂载 c:\ 驱动器。因此 Docker 也不会启动并中止并出现错误“WSL 发行版在等待生命周期服务器时停止。”

我写了一个 .bat 脚本来检查现有的“/mnt/c/”。如果不存在,它会重新启动 WSL。只有这样 Docker 才开始。

我从自动启动中删除了 Docker,而是在启动时执行此脚本。

@echo off
set CHECKDIR="/mnt/c/Users"
echo Check if dir %CHECKDIR% exists.
bash -c "cd %CHECKDIR%" && (
    echo Check successful
) || (
    echo Check failed. Restarting WSL
    wsl --shutdown
)
echo Start Docker
start "" "C:\Program Files\Docker\Docker\Docker Desktop.exe"

也许这对这里的一些人来说很有趣,只要这个错误没有被修复。