Windows 10 之 WSL 2
Windows Subsystem for Linux(WSL)无疑大大提升了Windows下程序开发的体验。
WSL 2向开发者提供的完整的系统调用兼容,使得许多无法在WSL 1中安装的应用,如Docker在WSL 2下成为可能。
WSL 2要求Windows 10 build 18917 或更高版本,否则无法使用。
查看Win10构建号
win + R
输入:
winver
弹窗如下,显示当前的构建号:

如果build低于18917,就需要升级Win 10。
更新Win10到18917+
参考:
https://www.jb51.net/os/win10/678060.html
WSL 1升级WSL2
由于笔者的Win10已经安装了WSL 1,因此需要从WSL 1升级到WSL 2。
首先启用“虚拟机平台”可选组件,在管理员身份打开的PowerShell中输入:
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
执行成功后立即重启生效。
接着使用命令行设置要由 WSL 2 支持的发行版,在 PowerShell 中运行:
wsl --set-version <Distro> 2
并确保将 <Distro> 替换为发行版的实际名称。 (可以使用以下命令查看:wsl -l)。
由于笔者使用的是Ubuntu发行版,因此在powershell中执行:
wsl --set-default-version 2
wsl --set-version Ubuntu 2
其中wsl --set-default-version 2 将今后所有安装WSL发行版初始化为WSL 2发行版。等待上述转换完成,这个过程可能会花费一些时间。
接着就可以在powershell中执行:
wsl -l -v
查看使用的WSL的版本。如:
PS C:\WINDOWS\system32> wsl -l -v
NAME STATE VERSION
* Ubuntu Running 2
在Win10中安装SSH Client
参考:
https://docs.microsoft.com/zh-cn/windows-server/administration/openssh/openssh_install_firstuse
Powershell启动WSL
参考:
https://devblogs.microsoft.com/commandline/a-guide-to-invoking-wsl/
即只要在PowerShell中输入:
wsl
即可启动WSL。
通过PowerShell命令:
wsl --shutdown
也可以关闭当前运行的所有WSL实例。
除了PowerShell这种方式外,Windows还提供了快捷方式,我们的WSL通常是从Win 10的应用商店中安装的,找到Win 10本地安装WSL应用后的快捷方式,也可启动同时弹出对应WSL的终端。
WSL中安装SSH服务并启动
这个过程相当于在Linux中安装sshd,相关资料非常多,这里不赘述。
后续可以在Win 10中通过ssh客户端访问WSL,好处是可以使用自己喜欢的终端工具。
VSCode安装Remote Development套件
VSCode集成了对WSL的支持,便于在VSCode开发时操作WSL。
参考:
https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack
VSCode中配置SSH Config连接配置文件
示例:
Host WSL-UBUNTU
HostName 172.31.165.60
User darren
其中172.31.165.60是在WSL中执行网络查看命令如ifconfig查询到的。
VSCode连接成功WSL后,VSCode后续打开的所有Terminal都将是WSL上的终端,而不是Win10本地的终端。
VSCode打开WSL目录
在VSCode连接到WSL中之后,打开VSCode中的终端,此时终端连接的是WSL,在终端中cd到目标目录,输入:
code .
即可在VSCode中打开WSL内系统的目录。
Win 10 访问 WSL内部文件系统
如果我们想在Win 10和WSL之间进行文件的传输,Windows提供了非常方便的支持,上述通过VSCode是一种方式。
此外,在WSL中的用户home目录,输入:
explorer.exe .
Win 10就会弹出一个资源浏览器,支持以Windows窗口的形式浏览WSL中的文件系统,非常方便。
此外,PowerShell提供了一种访问WSL的命令行形式:
cd \\wsl$\{distro_name}\
例如,我的WSL是Ubuntu发行版,就在PowerShell下输入:
cd \\wsl$\Ubuntu
即可在PowerShell中浏览WSL的文件系统了。
WSL 2的神坑
原本当我在WSL 2 Ubuntu中安装了Docker-CE,这一在WSL 1中不敢想的事情时,我非常开心,觉得Windows在开发方面终于可以越来越接近MacBook,同时可以和Windows的虚拟机说拜拜了。
但是后续的使用中发现了 WSL 2存在的一个神坑,即每次重启Windows系统,WSL实例的IP地址就会动态变动,哈哈哈哈哈哈哈,每次查WSL实例的IP也是醉了。
当然网上也有一些开源的解决方案如每次启动时动态查询其IP,然后修改Windows的hosts文件,应用对WSL的访问不要使用IP而是用hosts文件中的主机名等等。
然而我还是觉得为WSL分配固定的IP应该是开发者的刚需,估计后续的Win 10版本也应该会修复这个问题。
总体说来,瑕不掩瑜,笔者已经在Windows 10 WSL 2愉快的玩Docker了,随着Win 10的不断成熟,我相信借助WSL应该会成为今后Windows上集成Docker的主流方式。
Windows 10 之 WSL 2的更多相关文章
- Copy Files from Windows 10 to wsl
Method 1 reboot( close wsl window and reopen ) Method 2 – Windows System Drive as a Mount point Wind ...
- 黑科技抢先尝(续) - Windows terminal中WSL Linux 终端的极简美化指南
目录 修改默认源,为apt-get安装提速 安装python 和 python pip 安装 zsh 安装powerline-font中的特定字体 安装powerline-shell 修改~目录下的配 ...
- 如何重启 Windows 10 子系统(WSL) ubuntu
如何重启 Windows 10 子系统(WSL) ubuntu WSL 子系统是基于 LxssManager 服务运行的. 只需要将 LxssManager 重启即可. 可以做成一个 bat 文件. ...
- 使用 Windows 10 WSL 搭建 ESP8266 编译环境并使用 VSCODE 编程(一)(2019-08-23)
目录 使用 Windows 10 WSL 搭建 ESP8266 编译环境并使用 VSCODE 编程 安装前准备 安装 ESP8266 工具链 下载 ESP8266 SDK 编译 花絮 使用 Windo ...
- 使用 VSCODE 在 Windows 10 WSL 中远程开发
使用 VSCODE 在 Windows 10 WSL 中远程开发 安装 VSCODE 1.35+ 版本. 在 VSCODE 中安装 WSL 插件. 点击左下角的 WSL 图标. 打开项目,提示路径. ...
- 笔记:在 Windows 10 WSL Ubuntu 18.04 安装 Odoo12 (2019-06-09)
笔记:在 Windows 10 WSL Ubuntu 18.04 安装 Odoo12 原因 为了和服务器一样的运行环境. 使用 Ubuntu 运行 Odoo 运行更快. 方便使用 Windows 10 ...
- Windows 10 WSL 2.0安装并运行Docker
在Windows 10 2004版本,微软更新WSL到了2.0,WSL 2.0已经拥有了完整的Linux内核!今天来测试一下,是否可以安装docker! 一.开启WSL 以管理员运行Powershe ...
- 如何在 Windows 10 上安装 WSL 2
翻译自 Joey Sneddon 2020年10月30日的文章<How to Install WSL 2 on Windows 10> [1] 如果您想在最新的 Windows 版本中尝试 ...
- Windows 10 运行原生Bash【Ubuntu】
当前widnows用户的 AppData\Local\lxss 目录下安装了ubuntu,其中rootfs是和ubuntu安装的目录一致 bash进入的就是LINUX的SHELL,因此其二进制格式是E ...
随机推荐
- 9419页最新一线互联网Android面试题解析大全
网上高级工程师面试相关文章鱼龙混杂,要么一堆内容,要么内容质量太浅, 鉴于此我整理了如下安卓开发高级工程师面试题以及答案帮助大家顺利进阶,下面进入正题: 一.Android相关 1.Activity ...
- Git-08-标签管理
标签管理 Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针 跟分支很像对不对?但是分支可以移动,标签不能移动 所以,创建和删除标签都是瞬间完成的 Git有commit,为什么还要 ...
- [11 Go语言基础-可变参数函数]
[11 Go语言基础-可变参数函数] 可变参数函数 什么是可变参数函数 可变参数函数是一种参数个数可变的函数. 语法 如果函数最后一个参数被记作 ...T ,这时函数可以接受任意个 T 类型参数作为最 ...
- Linux提权手法整理
之前写过了windows提权小结,这下一篇水什么就有了嘛,于是有了这篇水文,整理一下Linux提权 前篇windows提权小结 ,链接送上 https://www.cnblogs.com/lcxblo ...
- .NET 6 全新指标 System.Diagnostics.Metrics 介绍
前言 工友们, .NET 6 Preview 7 已经在8月10号发布了, 除了众多的功能更新和性能改进之外, 在 preview 7 版本中, 也新增了全新的指标API, System.Diagno ...
- Python中用max()筛选出列表中出现次数最多的元素
1 List = [1,2,3,4,2,3,2] # 随意创建一个只有数字的列表 2 maxTimes = max(List,key=List.count) # maxTimes指列表中出现次数最多的 ...
- NOIP 模拟 $17\; \rm 世界线$
题解 \(by\;zj\varphi\) 此题经简单观察可发现,一个点的贡献就是这个点所能到的点减去它的出度 那么我们就可以暴力搜索,但是显然会超时,所以我们可以使用一个黑科技 \(\rm bitse ...
- FPGA学习过程(一)
前言 终于有时间折腾这块fpga开发板了,不知不觉又熬夜了. 正文 实现一个呼吸灯的项目 打开quartus ii 建立工程 步骤就不讲了 新建一个pwm.v文件内容 module PWM ( inp ...
- kubebuilder实战之二:初次体验kubebuilder
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- jQuery中ajax请求的六种方法(三、四):$.getJSON()方法
4.$.getJSON()方法 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"&g ...