WSL(Windows Subsystem for Linux)的安装与排错

WSL(Windows Subsystem for Linux)的安装与排错

一、WSL简介

WSL是一个在Windows 10及以上版本中运行的兼容层,它允许用户在Windows系统上原生运行Linux二进制可执行文件(如ELF格式)。这为开发人员提供了一个方便的环境,可以在同一台机器上同时利用Windows和Linux系统的优势,无需使用虚拟机或双系统。

二、WSL的安装步骤

(一)系统要求

• Windows 10版本1607或更高版本(推荐使用较新的版本以获得更好的兼容性和性能)。

(二)启用WSL功能

  1. 通过控制面板
    • 打开“控制面板”,选择“程序”。
    • 在“程序”页面中,点击“启用或关闭Windows功能”。
    • 在弹出的“Windows功能”对话框中,找到“适用于Linux的Windows子系统”,勾选该选项。
    • 点击“确定”,系统会提示需要重启计算机,重启后WSL功能将被启用。
  2. 通过PowerShell(管理员权限)
    • 以管理员身份打开PowerShell。
    • 运行以下命令:Enable - WindowsOptionalFeature - Online - FeatureName Microsoft - Windows - Subsystem - Linux - NoRestart
    • 执行完上述命令后,再运行Restart - Computer命令重启计算机。

(三)安装Linux发行版

  1. 从Microsoft Store安装
    • 打开Microsoft Store。
    • 在搜索栏中输入“Linux”,会出现多个可安装的Linux发行版,如Ubuntu、Debian、Kali Linux等。
    • 选择想要安装的发行版(以Ubuntu为例),然后点击“获取”按钮。
    • 等待下载和安装过程完成。安装完成后,会提示设置用户名和密码,按照提示操作即可。

  2. 通过命令行安装(可选方法)
    • 以管理员身份打开PowerShell。
    • 首先,需要更新WSL包索引,运行命令:wsl --update
    • 然后,可以指定安装特定的Linux发行版及其版本。例如,要安装Ubuntu 20.04 LTS,可以运行命令:wsl --install -d Ubuntu -2004

(四)安装成功截图

在这里插入图片描述
启动WSL
在这里插入图片描述

三、WSL的排错步骤

(一)安装失败 - 功能未启用相关

  1. 检查Windows功能是否真正启用
    • 如果按照上述步骤通过控制面板或PowerShell启用WSL功能后,在安装Linux发行版时仍然提示相关错误,可能是功能未完全启用。
    • 再次检查“适用于Linux的Windows子系统”是否在“Windows功能”对话框中被勾选。如果没有,重新勾选并重启计算机。
    • 可以通过在PowerShell中运行Get - WindowsOptionalFeature - Online - FeatureName Microsoft - Windows - Subsystem - Linux命令来查看WSL功能的当前状态。如果“State”显示为“Disabled”,则表示功能未启用,需要重新启用。
  2. 检查系统更新
    • 旧版本的Windows可能存在一些与WSL不兼容的问题。确保Windows系统已经安装了最新的更新。
    • 打开“设置”,选择“更新和安全”,点击“检查更新”,安装所有可用的更新后,再尝试安装WSL。

(二)安装失败 - 网络相关

  1. Microsoft Store下载问题
    • 如果从Microsoft Store安装Linux发行版时出现下载失败的情况,可能是网络问题或者Microsoft Store本身的问题。
    • 首先,检查网络连接是否正常。可以尝试打开网页或者使用其他网络应用程序进行测试。
    • 如果网络正常,可以尝试清除Microsoft Store的缓存。以管理员身份打开PowerShell,运行命令:Get - AppxPackage - AllUsers Microsoft.WindowsStore | Foreach {Add - AppxPackage - DisableDevelopmentMode - Register “$($_.InstallLocation)\AppXManifest.xml”}
    • 清除缓存后,重新尝试从Microsoft Store安装Linux发行版。
  2. 代理设置影响
    • 如果计算机处于代理环境下,可能会影响WSL相关组件(如Microsoft Store或WSL本身的更新包)的下载。
    • 如果使用系统级代理,可以在“设置” - “网络和Internet” - “代理”中查看代理设置。尝试暂时关闭代理(如果允许),然后重新进行WSL的安装操作。
    • 如果是通过命令行安装,并且需要通过代理访问外部资源,可以设置代理环境变量。例如,在PowerShell中设置HTTP和HTTPS代理:$env:http_proxy = "http://proxy - address:port"$env:https_proxy = "http://proxy - address:port"(将“proxy - address:port”替换为实际的代理地址和端口)。

(三)安装Linux发行版后无法启动或运行问题

  1. 检查WSL版本兼容性
    • WSL有两个版本:WSL 1和WSL 2。某些较旧的Linux发行版可能在WSL 2上存在兼容性问题。
    • 可以通过在PowerShell中运行wsl --list --verbose命令查看已安装的Linux发行版及其使用的WSL版本。
    • 如果怀疑是WSL 2的兼容性问题,可以将发行版转换为WSL 1。对于名为“Ubuntu”的发行版,可以运行命令:wsl --set - version Ubuntu 1(将“Ubuntu”替换为实际的发行版名称)。

  2. 检查文件系统错误
    • 在Linux发行版内部,文件系统错误可能导致无法正常启动或运行。
    • 进入Linux发行版的命令行界面(通过在开始菜单中找到对应的发行版并点击打开)。
    • 对于基于Debian或Ubuntu的系统,可以尝试运行sudo fsck -f /dev/sdX(其中/dev/sdX是需要检查的分区,通常是根分区,可能需要根据实际情况调整)。注意,在运行fsck之前,最好先备份重要数据。
    • 如果是在WSL 2环境下,还可以尝试重新创建虚拟硬盘。首先,在PowerShell中停止相关的WSL发行版:wsl --shutdown,然后找到对应的虚拟硬盘文件(通常位于%LOCALAPPDATA%\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\ext4.vhdx,这里的路径根据不同的发行版会有所不同),将其重命名或移动到其他位置,再重新启动WSL发行版,系统会自动重新创建虚拟硬盘。

  3. 检查环境变量和配置文件
    • 某些环境变量设置不正确或者配置文件损坏可能导致Linux发行版无法正常运行。
    • 在Linux发行版中,检查~/.bashrc~/.profile等配置文件是否存在语法错误。可以使用命令如bash -n ~/.bashrc来检查~/.bashrc文件的语法。
    • 如果在安装过程中自定义了一些环境变量,确保其设置正确。例如,如果设置了JAVA_HOME等环境变量,检查其指向的路径是否存在并且正确。

  4. 查看日志文件
    • WSL会生成一些日志文件,这些日志文件可以帮助诊断问题。
    • 在Windows系统中,可以查看%LOCALAPPDATA%\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\(同样,路径根据发行版不同而不同)目录下的日志文件,如wsl.log等。
    • 在Linux发行版内部,也可以查看系统日志,如/var/log/syslog(对于基于Debian或Ubuntu的系统)或者/var/log/messages(对于其他一些Linux发行版),查找与启动或运行相关的错误信息。

(四)性能问题

  1. WSL 2性能优化
    • 如果使用WSL 2并且遇到性能问题,可以尝试调整虚拟硬盘的大小和存储位置。
    • 虚拟硬盘默认大小可能不足以满足某些工作负载的需求。可以通过编辑注册表来调整虚拟硬盘的大小限制。打开注册表编辑器(regedit),找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LxssManager\Parameters键,在右侧窗口中找到DefaultAllocationSizeDefaultDiskSize键值(如果没有则可以新建DWORD值),适当增大其数值(例如,将DefaultDiskSize设置为100GB或更大,具体根据磁盘空间和使用需求而定)。
    • 将虚拟硬盘文件存储在快速的存储设备上,如固态硬盘(SSD)。如果计算机有多个磁盘,可以将虚拟硬盘文件从默认位置移动到SSD磁盘的合适位置。在移动之前,需要先停止WSL发行版(wsl --shutdown),移动文件后再重新启动发行版。
  2. 资源占用问题
    • 检查Windows系统资源是否被其他程序过度占用,导致WSL性能下降。
    • 打开任务管理器(Ctrl + Shift+ Esc),查看CPU、内存和磁盘的使用情况。如果发现有其他程序占用大量资源,可以尝试关闭不必要的程序或者调整其资源使用优先级。
    • 在Linux发行版内部,也可以检查进程的资源占用情况。例如,使用top命令查看CPU和内存占用率较高的进程,根据需要终止一些不必要的进程以提高整体性能。

四 安装时出现403错误(网络禁用)

Windows11家庭版下载wsl出现[已禁止403]错误,笔者试了管理员权限似乎不太好用
原因主要有两个,一是没有虚拟平台,二是需要访问国外服务器。

(一)配置基础运行环境

先设置windows自动更新,点击启动,这个就在计算机管理、服务里面
在这里插入图片描述

(二)Windows11家庭版默认没有Hyper-V选项。这时在桌面上新建一个文本文档,复制以下命令粘贴进去

pushd "%\~dp0"

dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt

for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"

del hyper-v.txt

dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL

这段代码是一个Windows批处理脚本,用于安装Hyper-V(Hyper-Virtualization,超虚拟化)角色。下面为你详细解释每一行代码的作用:

1. pushd "%~dp0"

功能
pushd 是一个批处理命令,用于将当前目录压入堆栈,并切换到指定的目录。在这里,%~dp0 是一个特殊的批处理变量扩展,表示当前批处理脚本所在的目录路径(包括驱动器号和路径,但不包括文件名)。所以这行代码的作用是切换到当前批处理脚本所在的目录。

2. dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt

功能
dir 是用于列出目录内容的命令。/b 参数表示以简洁模式(bare format)输出,即只显示文件名,不显示其他额外信息(如文件大小、修改日期等)。
%SystemRoot% 是一个系统环境变量,通常指向Windows操作系统的安装目录(如 C:\Windows)。
◦ 这行命令的目的是在 %SystemRoot%\servicing\Packages 目录下查找所有文件名包含 “Hyper-V” 的 .mum 文件(.mum 文件是Windows更新的安装包元数据文件),并将找到的文件名以简洁模式输出到当前目录下的 hyper-v.txt 文件中。

3. for /f %%i in ('findstr /i.hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"

功能
for /f 是用于处理文本字符串或文件内容的循环命令。%%i 是在批处理脚本中定义的循环变量(在命令行直接执行时使用单个 %,如 %i)。
findstr 是一个在文件中查找字符串的命令。/i 参数表示忽略大小写,. 表示查找任意字符(这里可能是为了确保能匹配到所有行),hyper-v.txt 是要查找的文件。所以 findstr /i.hyper-v.txt 的作用是在 hyper-v.txt 文件中的每一行查找任意字符(实际上就是读取文件的每一行)。
2>nul 是将错误输出重定向到空设备(即不显示错误信息)。如果 findstr 命令执行过程中出现错误(例如文件不存在等情况),错误信息将不会显示在屏幕上。
◦ 对于 findstr 找到的每一行(即每个包含 “Hyper-V” 的 .mum 文件名),执行 dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i" 命令。
dism(Deployment Image Servicing and Management)是Windows系统用于管理部署映像的工具。
/online 参数表示对正在运行的Windows操作系统进行操作(而不是对离线的映像文件)。
/norestart 表示执行完操作后不自动重启计算机。
/add-package 表示添加指定的包,这里指定的包就是 %SystemRoot%\servicing\Packages 目录下由前面找到的 .mum 文件对应的包。

4. del hyper-v.txt

功能
◦ 删除之前创建的 hyper-v.txt 文件,因为这个文件已经完成了它的使命(用于存储 .mum 文件名以便后续处理)。

5. dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL

功能
◦ 再次使用 dism 工具,/online 表示对正在运行的Windows操作系统进行操作。
/enable-feature 表示启用指定的功能。
/featurename:Microsoft-Hyper-V-All 明确指定要启用的功能是 “Microsoft-Hyper-V-All”,这是Hyper-V相关的所有功能的总称。
/LimitAccess 参数表示限制访问,即不从Windows Update获取更新或依赖项,只使用本地已有的资源。
/ALL 参数表示启用该功能及其所有父功能和子功能(如果有的话)。

总体而言,这段批处理脚本的目的是在Windows系统中安装Hyper-V角色。它首先查找相关的 .mum 包文件,然后将这些包添加到系统中,最后启用Hyper-V的所有相关功能 。

将文件另存为所有文件格式,文件名是Hyper-V.cmd,点击保存。
在这里插入图片描述
然后右击该文件以管理员身份运行,等待命令执行,成功后输入Y重启电脑。

(三)选择启用或关闭

在这里插入图片描述

(四)安装wsl

wsl --install --web-download

多试几次,卡住了就ctrl+C退出

在这里插入图片描述
安装成功
在这里插入图片描述

五 wsl查找版本时候,出现一个ubuntu正在分发中

C:\Windows\System32>wsl
wsl: 正在等待 OOBE 命令完成分发“Ubuntu”...

主要是因为上一步ubuntu的账号配错了

(一)配置一个符合校验规则的账号

Provisioning the new WSL instance Ubuntu
This might take a while...
Create a default Unix user account: 0120
Invalid username. A valid username must start with a lowercase letter or underscore, and can contain lowercase letters, digits, underscores, and dashes.
Create a default Unix user account: 0120
Invalid username. A valid username must start with a lowercase letter or underscore, and can contain lowercase letters, digits, underscores, and dashes.
Create a default Unix user account: xieyitang1028

(二)给这个虚拟机的密码设置

好像校验比较严格,不能和账户名重复

Create a default Unix user account: 0120
Invalid username. A valid username must start with a lowercase letter or underscore, and can contain lowercase letters, digits, underscores, and dashes.
Create a default Unix user account: 0120
Invalid username. A valid username must start with a lowercase letter or underscore, and can contain lowercase letters, digits, underscores, and dashes.
Create a default Unix user account: xieyitang1028
New password:
Retype new password:
Sorry, passwords do not match.
passwd: Authentication token manipulation error
passwd: password unchanged
Try again? [y/N] y
New password:
Retype new password:
passwd: password updated successfully
<3>WSL (670 - Relay) ERROR: operator():420: getpwuid(1000) failed 0
Welcome to Ubuntu 24.04.2 LTS (GNU/Linux 5.15.167.4-microsoft-standard-WSL2 x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sun Mar 16 13:32:13 CST 2025

  System load:  0.0                 Processes:             37
  Usage of /:   0.1% of 1006.85GB   Users logged in:       1
  Memory usage: 11%                 IPv4 address for eth0: 172.25.65.129
  Swap usage:   0%

Failed to connect to https://changelogs.ubuntu.com/meta-release-lts. Check your Internet connection or proxy settings


This message is shown once a day. To disable it please create the
//.hushlogin file.
#

直接输入一个通用的top命令

top - 13:37:07 up  2:32,  1 user,  load average: 0.02, 0.02, 0.00
Tasks:  31 total,   1 running,  30 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   7596.3 total,   6393.3 free,   1021.2 used,    416.9 buff/cache
MiB Swap:   2048.0 total,   2048.0 free,      0.0 used.   6575.1 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
    1 root      20   0   21648  13120   9600 S   0.0   0.2   0:01.20 systemd
    2 root      20   0    2776   1920   1796 S   0.0   0.0   0:00.01 init-systemd(Ub
    8 root      20   0    2792     68     68 S   0.0   0.0   0:00.01 init
   56 root      19  -1   50424  16548  15412 S   0.0   0.2   0:00.73 systemd-journal
   80 root      20   0   23992   6124   4948 S   0.0   0.1   0:00.35 systemd-udevd
  155 systemd+  20   0   21452  11800   9604 S   0.0   0.2   0:00.21 systemd-resolve
  156 systemd+  20   0   91020   6596   5744 S   0.0   0.1   0:00.27 systemd-timesyn
  165 root      20   0    4236   2668   2436 S   0.0   0.0   0:00.02 cron
  166 message+  20   0    9528   5136   4508 S   0.0   0.1   0:00.45 dbus-daemon
  173 root      20   0   17976   8248   7232 S   0.0   0.1   0:00.26 systemd-logind
  176 root      20   0 1756096  15928   9312 S   0.0   0.2   0:00.26 wsl-pro-service
  181 root      20   0    3160   1128   1040 S   0.0   0.0   0:00.01 agetty
  195 root      20   0    3116   1096   1004 S   0.0   0.0   0:00.00 agetty
  199 syslog    20   0  222508  11232   4500 S   0.0   0.1   0:00.19 rsyslogd
  210 root      20   0  107016  22472  13140 S   0.0   0.3   0:00.13 unattended-upgr
  291 root      20   0    2788    920    784 S   0.0   0.0   0:00.00 SessionLeader
  294 root      20   0    2784    212     80 S   0.0   0.0   0:00.00 Relay(295)
  295 root      20   0    2800   1156   1064 S   0.0   0.0   0:00.02 sh
  296 root      20   0    6664   4456   3692 S   0.0   0.1   0:00.01 login
  347 root      20   0   20352  11504   9364 S   0.0   0.1   0:00.21 systemd
  350 root      20   0   21156   1716      0 S   0.0   0.0   0:00.00 (sd-pam)
  370 root      20   0    5940   4996   3468 S   0.0   0.1   0:00.02 bash
  446 root      20   0    2788    216     80 S   0.0   0.0   0:00.00 Relay(447)                                         

(三)分发中的问题解决了

账号也顺登上去了

C:\Windows\System32>wsl                                                                                          <3>WSL (923 - Relay) ERROR: CreateProcessParseCommon:909: getpwuid(1000) failed 0                                root@xyt:/mnt/c/Windows/System32#                                                     

又出来一个909,用户名不不合法的问题,尝试打开这个xshell’

五 wsl查找版本时候,出现一个909错误

[c:\~]$ C:\Windows\System32>wsl
wsl: 正在等待 OOBE 命令完成分发“Ubuntu”...
<3>WSL (845 - Relay) ERROR: CreateProcessParseCommon:909: getpwuid(1000) failed 0
root@xyt:/mnt/c/Windows/System32#
root@xyt:/mnt/c/Windows/System32#'C:\Windows\System32' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

主要是因为上一步ubuntu的账号配错了。但也是能用,笔者感觉影响不大

<think>嗯,用户问的是如何在Windows 10家庭版上安装Docker。首先,我需要回想一下Docker在Windows上的安装要求。记得Docker Desktop通常需要Windows 10专业版或企业版,因为这些版本支持Hyper-V虚拟化技术。但家庭版默认是不包含Hyper-V的,所以用户可能需要先启用Hyper-V或者寻找替代方案。 接下来,可能的步骤包括检查系统是否满足要求,比如是否64位系统,版本是否足够新,还有虚拟化是否启用。用户可能需要进入BIOS设置开启虚拟化支持,这在很多电脑上默认是关闭的。 然后,由于家庭版不支持Hyper-V,可能需要使用Docker Toolbox作为替代方案。不过Docker Toolbox已经过时了,官方可能推荐其他方法。另外,还有一种方法是通过启用WindowsWSL2(Windows Subsystem for Linux)来安装Docker,但家庭版是否支持WSL2呢?记得WSL2需要特定的Windows版本,家庭版可能没问题,但需要确认。 可能还需要安装WSL2的后端,然后安装Docker Desktop并配置使用WSL2。不过步骤可能比较复杂,需要用户一步步操作。此外,用户可能需要加入Windows Insider计划或者更新到特定版本才能启用某些功能。 另外,用户可能不太清楚如何开启虚拟化,或者如何检查是否已经开启。可能需要指导他们使用任务管理器查看虚拟化状态,或者通过系统信息工具查看。 还可能涉及到安装过程中的常见问题,比如安装失败、无法启动Docker服务等,需要给出一些排错建议,比如重启电脑、检查系统更新、确保所有依赖项安装正确等。 总结下来,可能的步骤是:检查系统要求→启用虚拟化→安装WSL2→配置Docker Desktop使用WSL2→验证安装。或者使用Docker Toolbox的替代方法,但需要注意其已停止维护。 需要确保每一步的指令清晰,避免技术术语过多,让用户容易理解。同时提醒用户注意家庭版的限制,可能某些功能不如专业版完善,但基本使用应该没问题。</think>以下是Windows 10家庭版安装Docker的详细步骤: --- ### 一、安装前准备 1. **系统要求** - Windows 10家庭版版本 ≥ 1903(建议更新到最新版) - 64位操作系统 - 启用BIOS虚拟化支持(需重启进入BIOS设置) 2. **检查虚拟化状态** - 按`Ctrl+Shift+Esc`打开任务管理器 → 性能 → CPU → 查看"虚拟化"是否启用 - 若未启用,需重启电脑进入BIOS开启(不同品牌电脑进入方式不同,一般为`F2/Del/F10`键) --- ### 二、安装WSL2(Windows Subsystem for Linux) 由于家庭版不支持Hyper-V,需通过WSL2实现容器化: 1. **启用Windows功能** ```powershell dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart ``` - 完成后重启电脑 2. **安装WSL2内核更新包** - 下载地址:[https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi](https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi) - 安装后设置WSL2为默认版本: ```powershell wsl --set-default-version 2 ``` --- ### 三、安装Docker Desktop 1. **下载安装包** - 官网下载:[https://desktop.docker.com/win/stable/Docker%20Desktop%20Installer.exe](https://desktop.docker.com/win/stable/Docker%20Desktop%20Installer.exe) 2. **修改安装配置** - 安装时勾选: - `Use WSL 2 instead of Hyper-V` - `Install required Windows components for WSL 2` 3. **验证安装** - 安装完成后,打开Docker Desktop - 在PowerShell输入: ```powershell docker run hello-world ``` - 若显示`Hello from Docker!`表示成功 --- ### 四、常见问题处理 1. **WSL2启动失败** - 更新Windows到最新版本 - 确保BIOS中虚拟化已开启 2. **Docker服务无法启动** - 重启Docker Desktop - 重置Docker到出厂设置:`Settings → Reset → Reset to factory defaults` --- ### 替代方案:Docker Toolbox(旧版) > 适用于无法升级到WSL2的老旧系统(已停止维护,不推荐) 1. 下载地址:[https://github.com/docker/toolbox/releases](https://github.com/docker/toolbox/releases) 2. 安装Oracle VirtualBox和Docker CLI工具 --- ### 总结 通过WSL2方案可在家庭版获得接近专业版的Docker体验,建议优先使用此方法。若遇到兼容性问题,可尝试切换Linux发行版内核(如Ubuntu)或更新系统补丁。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值