我安装了 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
为了配置我的 Docker 卷,我想在docker-desktop-data
发行版中运行一些 Linux 命令,但是在尝试访问 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
我的 Docker 守护程序和 Ubuntu 运行良好,但我不知道如何在任何 WSL 发行版中运行命令。
答案1
您无法访问的原因docker-desktop-data
很简单——你不应该访问!它里面没有可以启动的 shell 或可执行文件,所以 WSL 实际上没有什么可做的跑步当您要求它开始“分发”时。
和docker-desktop
docker-desktop-data
分布由管理Docker Desktop 并不适合最终用户使用。甚至还有WSL Github 上的提案有一种方法可以默认向用户隐藏这些内容。
我建议您使用以下方法将事物恢复到“正常”状态:
wsl --set-default Ubuntu-22.04
docker-desktop-data
简单来说就是贮存对于 Docker 来说。这是存储 Docker 卷、图像和容器的地方。Docker 会帮你管理这些。如果你觉得需要对这些数据进行一些操作,docker
无法处理的事情,那么我建议你单独问一个问题那(并参见XY问题)。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
答案2
这个命令对我有用
wsl --set-default docker-desktop