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

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

nanshan 2024-11-22 18:28 27 浏览 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)

相关推荐

使用nginx配置域名及禁止直接通过IP访问网站

前段时间刚搭建好这个网站,一直没有关注一个问题,那就是IP地址也可以访问我的网站,今天就专门研究了一下nginx配置问题,争取把这个问题研究透彻。1.nginx配置域名及禁止直接通过IP访问先来看n...

如何在 Linux 中使用 PID 号查找进程名称?

在Linux的复杂世界中,进程是系统运行的核心,每个进程都由一个唯一的「进程ID」(PID)标识。无论是系统管理员在排查失控进程,还是开发者在调试应用程序,知道如何将PID映射到对应的进程名称都是一项...

Linux服务器硬件信息查询与日常运维命令总结

1.服务器硬件信息查询1.1CPU信息查询命令功能描述示例lscpu显示CPU架构、核心数、线程数等lscpucat/proc/cpuinfo详细CPU信息(型号、缓存、频率)cat/proc/c...

Ubuntu 操作系统常用命令详解(ubuntu常用的50个命令)

UbuntuLinux是一款流行的开源操作系统,广泛应用于服务器、开发、学习等场景。命令行是Ubuntu的灵魂,也是高效、稳定管理系统的利器。本文按照各大常用领域,详细总结Ubuntu必学...

从 0 到 1:打造基于 Linux 的私有 API 网关平台

在当今微服务架构盛行的时代,API网关作为服务入口和安全屏障,其重要性日益凸显。你是否想过,不依赖商业方案,完全基于开源组件,在Linux上构建一个属于自己的私有API网关平台?今天就带你...

Nginx搭建简单直播服务器(nginx 直播服务器搭建)

前言使用Nginx+Nginx-rtmp-module在Ubuntu中搭建简单的rtmp推流直播服务器。服务器环境Ubuntu16.04相关概念RTMP:RTMP协议是RealTi...

Linux连不上网?远程卡?这篇网络管理指南你不能错过!

大家好!今天咱们聊个所有Linux用户都躲不开的“老大难”——网络管理。我猜你肯定遇到过这些崩溃时刻:新装的Linux系统连不上Wi-Fi,急得直拍桌子;远程服务器SSH连不上,提示“Connecti...

7天从0到上线!手把手教你用Python Flask打造爆款Web服务

一、为什么全网开发者都在疯学Flask?在当今Web开发的战场,Flask就像一把“瑞士军刀”——轻量级架构让新手3天速成,灵活扩展能力又能支撑百万级用户项目!对比Django的“重型装甲”,Flas...

nginx配置文件详解(nginx反向代理配置详解)

Nginx是一个强大的免费开源的HTTP服务器和反向代理服务器。在Web开发项目中,nginx常用作为静态文件服务器处理静态文件,并负责将动态请求转发至应用服务器(如Django,Flask,et...

30 分钟搞定 Docker 安装与 Nginx 部署,轻松搭建高效 Web 服务

在云计算时代,利用容器技术快速部署应用已成为开发者必备技能。本文将手把手教你在阿里云轻量应用服务器上,通过Docker高效部署Nginx并发布静态网站,全程可视化操作,新手也能轻松上手!一、准...

Nginx 配置实战:从摸鱼到部署,手把手教你搞定生产级配置

各位摸鱼搭子们!今天咱不聊代码里的NullPointerException,改聊点「摸鱼必备生存技能」——Nginx配置!先灵魂拷问一下:写了一堆接口却不会部署?服务器被恶意请求打崩过?静态资源加载...

如何使用 Daphne + Nginx + supervisor部署 Django

前言:从Django3.0开始支持ASGI应用程序运行,使Django完全具有异步功能。Django目前已经更新到5.0,对异步支持也越来越好。但是,异步功能将仅对在ASGI下运行的应用程序可用...

Docker命令最全详解(39个最常用命令)

Docker是云原生的核心,也是大厂的必备技能,下面我就全面来详解Docker核心命令@mikechen本文作者:陈睿|mikechen文章来源:mikechen.cc一、Docker基本命令doc...

ubuntu中如何查看是否已经安装了nginx

在Ubuntu系统中,可以通过以下几种方法检查是否已安装Nginx:方法1:使用dpkg命令(适用于Debian/Ubuntu)bashdpkg-l|grepnginx输出...

OVN 概念与实践(德育概念的泛化在理论和实践中有什么弊端?)

今天我们来讲解OVN的概念和基础实践,要理解本篇博客的内容,需要前置学习:Linux网络设备-Bridge&VethPairLinux网络设备-Bridge详解OVS+Fa...

取消回复欢迎 发表评论: