百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

win11安装wsl以及升级到wsl2和安装docker

mhr18 2024-12-19 11:03 41 浏览 0 评论

环境准备

安装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 <Distro>' 安装。

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身份登录

# 更改用于发行版登录的默认用户。 用户必须已经存在于发行版中才能成为默认用户。
# <username>是你前面注册的用户名(如果你的WSL Ubuntu的名称是Ubuntu-20.04,那么对应的可执行文件名为ubuntu2004.exe)
ubuntu.exe config --default-user <username>  # 
# 列如(我执行的命令,仅作参看,不同的系统名字不一样)
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 <Linux 发行版的名称>
wsl -d <Linux 发行版的名称>


# 列出可用的 Linux 发行版
wsl --list --online

# 列出已安装的 Linux 发行版
wsl --list --verbose

# 更改指定分发的版本(1 或 2)
wsl --set-version <Linux 发行版的名称> <版本>

# 设置默认 WSL 版本(1 或 2)
wsl --set-default-version <版本>

# 设置默认 Linux 发行版(若要设置 WSL 命令将用于运行的默认 Linux 发行版,请将 <Distribution Name> 替换为你首选的 Linux 发行版的名称。)
wsl --set-default <Linux 发行版的名称>
wsl -s <Linux 发行版的名称>


# 将目录更改为主页(~ 可与 wsl 一起使用,以在用户的主目录中启动。 若要在 WSL 命令提示符中从任何目录跳回到主目录,可使用命令 cd ~。)
wsl ~

# 通过 PowerShell 或 CMD 运行特定的 Linux 发行版
wsl --distribution <Linux 发行版的名称> --user <用户的名称:例如 root>


# 更新 WSL(更新内核版本  )
wsl --update
# 选项:
--web-download:从 GitHub 而不是 Microsoft Store 下载最新更新。

# 检查 WSL 状态
wsl --status

# 查看内核版本
wsl --version
wsl -v


# Help 命令
wsl --help

# 以特定用户的身份运行(若要以指定用户身份运行 WSL,请将 <Username> 替换为 WSL 发行版中存在的用户名。)
wsl --user <Username>


# 更改发行版的默认用户(更改用于发行版登录的默认用户。 用户必须已经存在于发行版中才能成为默认用户。)
<Linux 发行版的名称> config --default-user <Username>
# 例如:ubuntu config --default-user johndoe 会将 Ubuntu 发行版的默认用户更改为“johndoe”用户。


# 导出分发版(将指定分发版的快照导出为新的分发文件。 默认为 tar 格式。 在标准输入中,文件名可以是 -。 选项包括:)
wsl --export <Linux 发行版的名称> <FileName>
例如:wsl --export Ubuntu-20.04 D:\Ubuntu.tar
# 选项
--vhd:指定导出分发版应为 .vhdx 文件而不是 tar 文件(这仅在使用 WSL 2 的情况下受支持)


# 导入分发版
wsl --import <Linux 发行版的名称> <InstallLocation> <FileName>
例如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 <Linux 发行版的名称>
例如:
wsl --unregister Ubuntu-20.04


# Terminate(终止指定的发行版或阻止其运行)
wsl --terminate <Linux 发行版的名称>
wsl -t <Linux 发行版的名称>


# 就地导入发行版(将指定的 .vhdx 文件导入为新的发行版。 虚拟硬盘必须采用 ext4 文件系统类型格式。)
wsl --import-in-place <Linux 发行版的名称> <FileName>

# 用之前看一下这个官方文档
注意:https://learn.microsoft.com/zh-cn/windows/wsl/wsl2-mount-disk
# 装载磁盘或设备
wsl --mount <DiskPath>
# 选项:
--vhd:指定 <Disk> 引用虚拟硬盘。
--name:使用装入点的自定义名称装载磁盘
--bare:将磁盘附加到 WSL2,但不进行装载。
--type <Filesystem>:装载磁盘时使用的文件系统类型默认为ext4(如果未指定)。此命令也可输入为:wsl --mount -t <Filesystem>。可以使用blkid <BlockDevice> 命令检测文件系统类型,例如:blkid <dev/sdb1>。
--partition <Partition Number>:要装载的分区的索引号默认为整个磁盘(如果未指定)。
--options <MountOptions>:装载磁盘时,可以包括一些特定于文件系统的选项。 例如,wsl --mount -o "data-ordered" 或 wsl --mount -o "data=writeback 之类的 ext4 装载选项。 但是,目前仅支持特定于文件系统的选项。 不支持通用选项,例如 ro、rw 或 noatime。


# 卸载磁盘(卸载磁盘路径中给定的磁盘,如果未提供磁盘路径,则此命令将卸载并分离所有已装载的磁盘。)
wsl --unmount <DiskPath>

# 标识 IP 地址
wsl hostname -i # 标识通过 WSL 2 安装的 Linux 分发版 IP 地址(WSL 2 VM 地址)
cat /etc/resolv.conf # 表示从 WSL 2 看到的 WINDOWS 计算机的 IP 地址 (WSL 2 VM)

相关推荐

订单超时自动取消业务的 N 种实现方案,从原理到落地全解析

在分布式系统架构中,订单超时自动取消机制是保障业务一致性的关键组件。某电商平台曾因超时处理机制缺陷导致日均3000+订单库存锁定异常,直接损失超50万元/天。本文将从技术原理、实现细节、...

使用Spring Boot 3开发时,如何选择合适的分布式技术?

作为互联网大厂的后端开发人员,当你满怀期待地用上SpringBoot3,准备在项目中大显身手时,却发现一个棘手的问题摆在面前:面对众多分布式技术,究竟该如何选择,才能让SpringBoot...

数据库内存爆满怎么办?99%的程序员都踩过这个坑!

你的数据库是不是又双叒叕内存爆满了?!服务器监控一片红色警告,老板在群里@所有人,运维同事的电话打爆了手机...这种场景是不是特别熟悉?别慌!作为一个在数据库优化这条路上摸爬滚打了10年的老司机,今天...

springboot利用Redisson 实现缓存与数据库双写不一致问题

使用了Redisson来操作Redis分布式锁,主要功能是从缓存和数据库中获取商品信息,以下是针对并发时更新缓存和数据库带来不一致问题的解决方案1.基于读写锁和删除缓存策略在并发更新场景下,...

外贸独立站数据库炸了?对象缓存让你起死回生

上周黑五,一个客户眼睁睁看着服务器CPU飙到100%——每次页面加载要查87次数据库。这让我想起2024年Pantheon的测试:Redis缓存能把WooCommerce查询速度提升20倍。跨境电商最...

手把手教你在 Spring Boot3 里纯编码实现自定义分布式锁

为什么要自己实现分布式锁?你是不是早就受够了引入各种第三方依赖时的繁琐?尤其是分布式锁这块,每次集成Redisson或者Zookeeper,都得额外维护一堆配置,有时候还会因为版本兼容问题头疼半...

如何设计一个支持百万级实时数据推送的WebSocket集群架构?

面试解答:要设计一个支持百万级实时数据推送的WebSocket集群架构,需从**连接管理、负载均衡、水平扩展、容灾恢复**四个维度切入:连接层设计-**长连接优化**:采用Netty或Und...

Redis数据结构总结——面试最常问到的知识点

Redis作为主流的nosql存储,面试时经常会问到。其主要场景是用作缓存,分布式锁,分布式session,消息队列,发布订阅等等。其存储结构主要有String,List,Set,Hash,Sort...

skynet服务的缺陷 lua死循环

服务端高级架构—云风的skynet这边有一个关于云风skynet的视频推荐给大家观看点击就可以观看了!skynet是一套多人在线游戏的轻量级服务端框架,使用C+Lua开发。skynet的显著优点是,...

七年Java开发的一路辛酸史:分享面试京东、阿里、美团后的心得

前言我觉得有一个能够找一份大厂的offer的想法,这是很正常的,这并不是我们的饭后谈资而是每个技术人的追求。像阿里、腾讯、美团、字节跳动、京东等等的技术氛围与技术规范度还是要明显优于一些创业型公司...

mysql mogodb es redis数据库之间的区别

1.MySQL应用场景概念:关系型数据库,基于关系模型,使用表和行存储数据。优点:支持ACID事务,数据具有很高的一致性和完整性。缺点:垂直扩展能力有限,需要分库分表等方式扩展。对于复杂的查询和大量的...

redis,memcached,nginx网络组件

1.理解阻塞io,非阻塞io,同步io,异步io的区别2.理解BIO和AIO的区别io多路复用只负责io检测,不负责io操作阻塞io中的write,能写多少是多少,只要写成功就返回,譬如准备写500字...

SpringBoot+Vue+Redis实现验证码功能

一个小时只允许发三次验证码。一次验证码有效期二分钟。SpringBoot整合Redis...

AWS MemoryDB 可观测最佳实践

AWSMemoryDB介绍AmazonMemoryDB是一种完全托管的、内存中数据存储服务,专为需要极低延迟和高吞吐量的应用程序而设计。它与Redis和Memcached相似,但具有更...

从0构建大型AI推荐系统:实时化引擎从工具到生态的演进

在AI浪潮席卷各行各业的今天,推荐系统正从幕后走向前台,成为用户体验的核心驱动力。本文将带你深入探索一个大型AI推荐系统从零起步的全过程,揭示实时化引擎如何从单一工具演进为复杂生态的关键路径。无论你是...

取消回复欢迎 发表评论: