WSL是什么

Windows Subsystem for Linux(简称WSL)是一个在Windows 10/11上能够运行原生Linux二进制可执行文件(ELF格式)的兼容层。适用于 LinuxWindows 子系统 (WSL) 可让开发人员直接在 Windows 上按原样运行 GNU/Linux 环境(包括大多数命令行工具、实用工具和应用程序),且不会产生传统虚拟机或双启动设置开销。

安装部署

安装wsl

打开WindowsPowershell,运行一下命令

# 安装wsl,不指定linux发行版
wsl --install --no-distribution

# 查看wsl的版本信息
wsl -v

# 设置wsl的版本
# wsl --set-version <version:1/2>
wsl --set-version 2

安装debian

# 查看所有可安装的linux发行版本
wsl --list --online

# 安装debian系统 
# wsl --install <Distribution>
wsl --install -d Debian

# 查看已安装的linux子系统 
# wsl -l -v
wsl --list --verbose

# 设置默认linux发行版 
# wsl --set-default <Distribution>
wsl --set-default Debian

#进入debian系统 wsl --distribution <Distribution> --user <UserName>
wsl -d Debian

迁移系统

# 关闭所有实例
wsl --shutdown

# 导出系统 
# wsl --export <Distribution> <FileName>.tar
wsl --export Debian debian.tar

# 卸载系统 
# wsl --unregister <Distribution>
wsl --unregister Debian

# 导入系统 
# wsl --import <Distribution> <InstallLocation> <FileName>.tar
wsl --import Debian e:\WSL e:\WSL\debian.tar

# 进入系统
wsl -d Debian

遇到的问题

无法使用系统代理

将wsl网络设置为镜像,这样使用的就是windows的网络了。

  • 创建或打开c:\Users\<你的用户名>\.wslconfig
[experimental]
autoMemoryReclaim=gradual  
networkingMode=mirrored
dnsTunneling=true
firewall=true
autoProxy=true
  • 关闭wsl子系统重新启动
# 关闭所有实例
wsl --shutdown

# 进入系统
wsl -d Debian

debian无法使用systemctl

报错:System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down

  • 安装软件
# 安装所需软件
apt install -y daemonize fontconfig
  • 修改/etc/profile文件,再文件末尾添加
SYSTEMD_PID=$(ps -ef | grep '/lib/systemd/systemd --system-unit=basic.target$' | grep -v unshare | awk '{print $2}')
if [ -z "$SYSTEMD_PID" ]; then
  sudo /usr/bin/daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target
  SYSTEMD_PID=$(ps -ef | grep '/lib/systemd/systemd --system-unit=basic.target$' | grep -v unshare | awk '{print $2}')
fi
if [ -n "$SYSTEMD_PID" ] && [ "$SYSTEMD_PID" != "1" ]; then
  exec sudo /usr/bin/nsenter -t $SYSTEMD_PID -a su - $LOGNAME
fi
  • 修改/etc/sudoers文件,再文件末尾添加
%sudo ALL=(ALL) NOPASSWD: /usr/sbin/daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target
%sudo ALL=(ALL) NOPASSWD: /usr/bin/nsenter -t [0-9]* -a su - [a-zA-Z0-9]*
  • 再次执行systemctl命令,不再报错了
#重载
source /etc/profile

#启动docker
systemctl start docker.service

docker运行容器报错

报错:error getting credentials - err: exec: "docker-credential-desktop.exe": executable file not found in $PATH, out: ``

# 进入dockers目录
cd ~/.docker

# 修改config.json文件
vim config.json

#------------------------------
#将 credsStore 修改为 credStore
#------------------------------

# 重启docker
systemctl restart docker.service

docker容器无法被主机访问

vim /etc/docker/damon.json

#------------------------------
#添加:
"iptables": false
#------------------------------

systemctl restart docker.service
文章作者: Willxup
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Willxup
Linux Windows WSL Linux
喜欢就支持一下吧