环境准备



安装Linux分发版
wsl官网文档地址:
https://learn.microsoft.com/zh-cn/windows/wsl/ 注意:1、wsl2才支持安装docker 2、老版本的win11系统需要手动下载支持wsl2的 Linux内核更新包(点击运行即可)
# 通过该命令查看默认的wsl是1还是2,
wsl --status
# wsl --status 输出结果-1
# 如果是1,就需要先看一下 【wsl1升级至wsl2】 ,去升级wsl2所需的linux内核
默认版本: 1
# wsl --status 输出结果-2
# 如果是2,就不用升级了,执行wsl --install -d Ubuntu-20.04命令理论上不会出现问题
默认版本: 2
# 选择要安装的版本(其实也可从微软商店中下载Linux分发版)
wsl --list --online
# 安装Linux分发版 (Ubuntu-20.04 为下图 NAME)
wsl --install -d Ubuntu-20.04
# 安装完成后
# 首次启动新安装的 Linux 分发版时,会让你输入用户名,以及密码,完成后即为安装成功

问题1、wsl --list --online无法解析服务器的名称或地址
C:\Users\Lenovo>wsl --list --online
无法从“https://raw.githubusercontent.com/microsoft/WSL/master/distributions/DistributionInfo.json”中提取列表分发。无法解析服务器的名称或地址
Error code: Wsl/WININET_E_NAME_NOT_RESOLVED
# 解决方法,在win11系统中找到hosts文件添加如下内容
# hosts文件路径: C:\Windows\System32\drivers\etc
185.199.108.133 raw.githubusercontent.com
185.199.109.133 raw.githubusercontent.com
185.199.110.133 raw.githubusercontent.com
185.199.111.133 raw.githubusercontent.com
# 验证
C:\Users\Lenovo>wsl --list --online
以下是可安装的有效分发的列表。
使用 'wsl.exe --install ' 安装。
NAME FRIENDLY NAME
Ubuntu Ubuntu
Debian Debian GNU/Linux
kali-linux Kali Linux Rolling
Ubuntu-18.04 Ubuntu 18.04 LTS
Ubuntu-20.04 Ubuntu 20.04 LTS
Ubuntu-22.04 Ubuntu 22.04 LTS
Ubuntu-24.04 Ubuntu 24.04 LTS
OracleLinux_7_9 Oracle Linux 7.9
OracleLinux_8_7 Oracle Linux 8.7
OracleLinux_9_1 Oracle Linux 9.1
openSUSE-Leap-15.5 openSUSE Leap 15.5
SUSE-Linux-Enterprise-Server-15-SP4 SUSE Linux Enterprise Server 15 SP4
SUSE-Linux-Enterprise-15-SP5 SUSE Linux Enterprise 15 SP5
openSUSE-Tumbleweed openSUSE Tumbleweed
问题2、wsl --install -d Ubuntu-20.04执行报错
# 解决方法
# 获取WSL2 Linux内核更新包
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
wsl1升级至wsl2
注意:
1、一般是比较老的系统默认是wsl1,新的系统现在基本默认都是wsl2,具体查看方式通过:wsl --status 命令查。
2、如果是wsl2的话,无需操作这一步
# 检查 WSL 状态(查看有关 WSL 配置的常规信息,例如默认发行版类型、默认发行版和内核版本。)
wsl --status
# 输出结果
默认版本: 1 # 该结果表示默认是wsl1,这时就需要下面的操作了
# 获取WSL2 Linux内核更新包(安装过就不用安装了)(为什么安装这个,官方文档中有,可自行去看)
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
# 将 WSL2 设置为默认版本
wsl --set-default-version 2
# 查看目前的WSL版本
wsl -l -v
# 结果
Name State Version
Ubuntu-20.04 Stopped 1
# 执行更新
wsl --set-version Ubuntu-20.04 2
#输出
正在进行转换,这可能需要几分钟时间...
有关与 WSL 2 的主要区别的信息,请访问 https://aka.ms/wsl2
转换完成。
# 重新查看
wsl -l -v
#输出
Name State Version
Ubuntu-20.04 Stopped 2
迁移安装的linux分发版
# 终止正在运行的wsl
wsl --shutdown
# 检查当前wsl是否在运行
wsl -l -v
# 将需要迁移的Linux,进行导出
wsl --export Ubuntu-20.04 D:\Ubuntu.tar
# 导出完成之后,就需要将原有的分发进行卸载
wsl --unregister Ubuntu-20.04
# 然后将导出的文件放到需要保存的地方,进行导入即可
wsl --import Ubuntu-20.04 D:\Ubuntu_2004 D:\Ubuntu.tar --version 2
# 上述操作完成之后能够顺利打开WSL Ubuntu,但是显示以root身份登录
# 更改用于发行版登录的默认用户。 用户必须已经存在于发行版中才能成为默认用户。
# 是你前面注册的用户名(如果你的WSL Ubuntu的名称是Ubuntu-20.04,那么对应的可执行文件名为ubuntu2004.exe)
ubuntu.exe config --default-user #
# 列如(我执行的命令,仅作参看,不同的系统名字不一样)
ubuntu2004.exe config --default-user zkc
# 看下图进入对应目录,找到ubuntu2004.exe,在此目录进入cmd执行上面的命令

安装Docker Desktop(先看下一步)


修改Docker Desktop默认安装位置(在安装前操作)
注意:如果软件更新了,这个就会失效,因为软件更新会先卸载在安装,在卸载过程中会删除C:\Program Files\Docker目录,这样下方执行的软连接就会失效
# Docker Desktop默认安装位置
C:\Program Files\Docker
# 需要是管理员权限
# 建立软连接的命令如下:(再没安装之前执行)使用Windows PowerShell会报错,使用 命令提示符 没事(如下图),
mklink /j "C:\Program Files\Docker" "D:\Program Files\Docker"
# 看一下对应目录有没有文件夹,
C盘的没有不用管,D盘下没有就创建一下


Docker-Desktop储存路径更改
方式一(推荐)

方式二(老版本最初软件没有提供修改时用的方法)
Docker Desktop的默认存储路径 C:\Users${用户文件}\AppData\Local\Docker
# docker-desktop:保存的是程序
docker-desktop 主要保存的是Docker Desktop本身及其依赖的服务程序,这部分通常指的是Docker引擎以及为了支持Docker在Windows上运行所需要的其他配套软件和服务。
# docker-desktop-data: 保存的镜像
docker-desktop-data 则主要用于保存Docker所使用的实际数据,尤其是容器镜像、容器的可写层、容器数据卷以及其他持久化的数据。当您在Docker中拉取、构建或运行容器时,产生的镜像和容器状态都会存储在这个环境中。因此,当我们谈论镜像存储位置时,docker-desktop-data 所对应的文件系统区域就是存储这些镜像和其他重要数据的地方。对于需要迁移镜像存储位置或进行备份的情况,通常会针对docker-desktop-data 进行操作。
PS C:\Users\Lenovo> wsl -l -v
NAME STATE VERSION
* Ubuntu-20.04 Running 2
docker-desktop Running 2
docker-desktop-data Running 2
PS C:\Users\Lenovo> wsl -l --all -v
NAME STATE VERSION
* Ubuntu-20.04 Running 2
docker-desktop Running 2
docker-desktop-data Running 2
# 首先需要将docker desktop退出,确保状态是关闭状态
wsl --shutdown
# 结果
PS C:\Users\Lenovo> wsl -l -v
NAME STATE VERSION
* Ubuntu-20.04 Stopped 2
docker-desktop Stopped 2
docker-desktop-data Stopped 2
# 备份
wsl --export docker-desktop E:\wsl2\docker\docker-desktop.tar
wsl --export docker-desktop-data E:\wsl2\docker\docker-desktop-data.tar
# 注销
wsl --unregister docker-desktop
wsl --unregister docker-desktop-data
# 导入
wsl --import docker-desktop E:\wsl2\docker\docker-desktop E:\wsl2\docker\docker-desktop.tar --version 2
wsl --import docker-desktop-data E:\wsl2\docker\docker-desktop-data E:\wsl2\docker\docker-desktop-data.tar --version 2
win系统安装docker容器需要注意本机端口是否被使用,如果被使用了映射的时候就没法用了
# 查看所有连接的监听的端口
netstat -ano
# 排查是否有程序占用了9091端口
netstat -ano | findstr 9091
# 通过cmd命令查看哪些端口被禁用TCP协议
netsh interface ipv4 show excludedportrange protocol=tcp
问题3、启动linux分发出现“参考的对象类型不支持尝试的操作”字样
# 出现
参考的对象类型不支持尝试的操作。 Press any key to continue...
# 解决
# 使用(管理员)执行:
netsh winsock reset
wsl命令
# 关闭(立即终止所有运行的分发及 WSL2)
wsl --shutdown
# 列出已安装的 WSL 分发版本
wsl --list
wsl -l
# 安装 WSL 和 Linux 的默认 Ubuntu 发行版
wsl --install
# 选项包括:
--distribution , -d:指定要安装的 Linux 发行版。 可以通过运行 wsl --list --online 来查找可用的发行版。
--no-launch , -n:安装 Linux 发行版,但不自动启动它。
--web-download:通过联机渠道安装,而不是使用 Microsoft Store 安装。
# 未安装 WSL 时,选项包括:
--inbox:使用 Windows 组件(而不是 Microsoft Store)安装 WSL。 (WSL 更新将通过 Windows 更新接收,而不是通过 Microsoft Store 中推送的可用更新来接收)。
--enable-wsl1:在安装 Microsoft Store 版本的 WSL 的过程中也启用“适用于 Linux 的 Windows 子系统”可选组件,从而启用 WSL 1。
--no-distribution:安装 WSL 时不安装发行版。
# 运行指定分发
wsl --distribution
wsl -d
# 列出可用的 Linux 发行版
wsl --list --online
# 列出已安装的 Linux 发行版
wsl --list --verbose
# 更改指定分发的版本(1 或 2)
wsl --set-version <版本>
# 设置默认 WSL 版本(1 或 2)
wsl --set-default-version <版本>
# 设置默认 Linux 发行版(若要设置 WSL 命令将用于运行的默认 Linux 发行版,请将 替换为你首选的 Linux 发行版的名称。)
wsl --set-default
wsl -s
# 将目录更改为主页(~ 可与 wsl 一起使用,以在用户的主目录中启动。 若要在 WSL 命令提示符中从任何目录跳回到主目录,可使用命令 cd ~。)
wsl ~
# 通过 PowerShell 或 CMD 运行特定的 Linux 发行版
wsl --distribution --user <用户的名称:例如 root>
# 更新 WSL(更新内核版本 )
wsl --update
# 选项:
--web-download:从 GitHub 而不是 Microsoft Store 下载最新更新。
# 检查 WSL 状态
wsl --status
# 查看内核版本
wsl --version
wsl -v
# Help 命令
wsl --help
# 以特定用户的身份运行(若要以指定用户身份运行 WSL,请将 替换为 WSL 发行版中存在的用户名。)
wsl --user
# 更改发行版的默认用户(更改用于发行版登录的默认用户。 用户必须已经存在于发行版中才能成为默认用户。)
config --default-user
# 例如:ubuntu config --default-user johndoe 会将 Ubuntu 发行版的默认用户更改为“johndoe”用户。
# 导出分发版(将指定分发版的快照导出为新的分发文件。 默认为 tar 格式。 在标准输入中,文件名可以是 -。 选项包括:)
wsl --export
例如:wsl --export Ubuntu-20.04 D:\Ubuntu.tar
# 选项
--vhd:指定导出分发版应为 .vhdx 文件而不是 tar 文件(这仅在使用 WSL 2 的情况下受支持)
# 导入分发版
wsl --import
例如1:wsl --import Ubuntu-20.04 D:\Ubuntu_2004 D:\Ubuntu.tar
例如2:wsl --import Ubuntu-20.04 D:\Ubuntu_2004 D:\Ubuntu.tar --version 2
# 选项:
--vhd:指定导入分发版应为 .vhdx 文件而不是 tar 文件(这仅在使用 WSL 2 的情况下受支持)
--version <1/2>:指定将分发版导入为 WSL 1 还是 WSL 2 分发版
# 注销或卸载 Linux 发行版(尽管可以通过 Microsoft Store 安装 Linux 发行版,但无法通过 Store 将其卸载。)
wsl --unregister
例如:
wsl --unregister Ubuntu-20.04
# Terminate(终止指定的发行版或阻止其运行)
wsl --terminate
wsl -t
# 就地导入发行版(将指定的 .vhdx 文件导入为新的发行版。 虚拟硬盘必须采用 ext4 文件系统类型格式。)
wsl --import-in-place
# 用之前看一下这个官方文档
注意:https://learn.microsoft.com/zh-cn/windows/wsl/wsl2-mount-disk
# 装载磁盘或设备
wsl --mount
# 选项:
--vhd:指定 引用虚拟硬盘。
--name:使用装入点的自定义名称装载磁盘
--bare:将磁盘附加到 WSL2,但不进行装载。
--type :装载磁盘时使用的文件系统类型默认为ext4(如果未指定)。此命令也可输入为:wsl --mount -t 。可以使用blkid 命令检测文件系统类型,例如:blkid <dev/sdb1>。
--partition :要装载的分区的索引号默认为整个磁盘(如果未指定)。
--options :装载磁盘时,可以包括一些特定于文件系统的选项。 例如,wsl --mount -o "data-ordered" 或 wsl --mount -o "data=writeback 之类的 ext4 装载选项。 但是,目前仅支持特定于文件系统的选项。 不支持通用选项,例如 ro、rw 或 noatime。
# 卸载磁盘(卸载磁盘路径中给定的磁盘,如果未提供磁盘路径,则此命令将卸载并分离所有已装载的磁盘。)
wsl --unmount
# 标识 IP 地址
wsl hostname -i # 标识通过 WSL 2 安装的 Linux 分发版 IP 地址(WSL 2 VM 地址)
cat /etc/resolv.conf # 表示从 WSL 2 看到的 WINDOWS 计算机的 IP 地址 (WSL 2 VM)
本文暂时没有评论,来添加一个吧(●'◡'●)