使用 mount -a 的 WSL 错误处理 fstab 失败

Ali*_*ian 5 windows-subsystem-for-linux

我安装了 WSL(适用于 Linux 的 Windows 子系统)来使用 Docker。我还在 WSL 中安装了 Ubuntu Linux。这是我的 WSL 列表:

PS C:\Windows\system32> wsl -l

Windows Subsystem for Linux Distributions:
docker-desktop-data (Default)
docker-desktop
Ubuntu-22.04
Run Code Online (Sandbox Code Playgroud)

为了配置我的 Docker 卷,我想在发行版中运行一些 Linux 命令docker-desktop-data,但在尝试访问 shell 时收到此错误:

PS C:\Windows\system32> wsl
Processing fstab with mount -a failed. 
<3>WSL (56) ERROR: CreateProcessEntryCommon:358: getpwuid(0) failed 2  
<3>WSL (56) ERROR: CreateProcessEntryCommon:362: getpwuid(0) failed 2
<3>WSL (56) ERROR: CreateProcessEntryCommon:570: execvpe /bin/sh failed 2
<3>WSL (56) ERROR: CreateProcessEntryCommon:579: Create process not expected to return   
Run Code Online (Sandbox Code Playgroud)

我的 Docker 守护进程和 Ubuntu 工作正常,但我不知道如何在任何 WSL 发行版中运行命令。

Not*_*1ds 5

您无法访问的原因docker-desktop-data很简单——您不应该访问!它内部没有可以启动的 shell 或可执行文件,因此当您要求 WSL 启动“分发”时,它实际上没有任何东西可以运行。

docker-desktop都是由 Docker Desktop 管理的docker-desktop-data发行版,并不适合最终用户使用。WSL Github 中甚至有一项提案,要求默认情况下对用户隐藏这些内容。

我建议您通过以下方式将事情恢复到“正常”状态:

wsl --set-default Ubuntu-22.04
Run Code Online (Sandbox Code Playgroud)
  • docker-desktop-data简单地用作Docker 的存储。这是存储 Docker 卷、映像和容器的位置。Docker 为你管理了这个。docker如果您觉得需要对命令无法处理的数据执行某些操作,那么我建议您就此提出一个单独的问题(并参见XY Problem)。

  • docker-desktop包含包含所有 Docker 可执行文件和套接字的发行版。然后将它们链接到您的其他发行版(例如 Ubuntu),以便您可以docker在那里运行命令(以及从 PowerShell 和 CMD)。虽然您可以进入此发行版,但实际上没有理由这样做。请记住,您对此发行版所做的任何更改:

    • 可能会破坏 Docker Desktop 功能
    • 当 Docker Desktop 升级时,至少会被重置,因为新的docker-desktop发行版将安装在旧的发行版上。

虽然不推荐(因为你很容易破坏东西),但你至少可以看到docker-desktop-data它们安装到发行版中的内容docker-desktop

wsl ~ -d docker-desktop

cd /mnt/host/wsl/docker-desktop-data
find
Run Code Online (Sandbox Code Playgroud)


小智 5

这个命令对我有用

wsl --set-default docker-desktop
Run Code Online (Sandbox Code Playgroud)