我正在尝试让 Ubuntu 20.04 与 Windows 10 Home(10.0.19041 Build 19041)上的 WSL2 配合使用,因此将版本设置为 v2 以便与 Docker Desktop 一起使用。
我wsl --set-default-version 2
在安装之前已经设置Windows 商店中的 Ubuntu 20.04 LTS。
在 Ubuntu 系统(通过“开始”菜单)中,我看到:
$ wsl.exe -l -v
NAME STATE VERSION
* docker-desktop Stopped 2
Ubuntu-20.04 Running 1
docker-desktop-data Stopped 2
但是,在 PowerShell 中的 Windows 主机上我看不到 Ubuntu 发行版:
> wsl -l -v
NAME STATE VERSION
* docker-desktop Stopped 2
docker-desktop-data Stopped 2
为什么从 Windows 主机运行命令时缺少发行版?
(其次:我不确定为什么当我将默认安装设置为 v2 时 Ubuntu 却设置为 v1!)
答案1
在这种情况下,正如我们在评论中所确认的那样,问题原来是 PowerShell 在提升的管理员会话中运行,因此wsl -l -v
PowerShell 中通过注册表项检索了一组与来自(非提升用户的)开始菜单的 WSL 实例不同的实例。
对于将来可能遇到此问题的人,您可以确定每个实例的 Windows 用户并比较两者:
在“普通”PowerShell 中,运行
Write-Host ([System.Security.Principal.WindowsIdentity]::GetCurrent().Name)
在从“开始”菜单运行的 WSl 实例中,运行
powershell.exe -c "Write-Host ([System.Security.Principal.WindowsIdentity]::GetCurrent().Name)"
。这将运行 PowerShell 子 shell之内WSL 实例来确定该进程的用户。
检查 WSL 正在使用的注册表项也可能很有用:
- 电源外壳:
Get-ChildItem "HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss" -Recurse
- WSL:
powershell.exe -c "Get-ChildItem 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss' -Recurse"