wsl 及隔离使用 Agent
WSL 的杂知识点
wsl是宿主机中的一个虚拟磁盘(也就是一个文件),用(Get-ChildItem -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss | Where-Object {$_.GetValue("DistributionName") -eq '发行版名称,比如Ubuntu'}).GetValue("BasePath") + "\ext4.vhdx"查看这个虚拟磁盘的位置(一般在C盘下面),子系统中的所有东西都是存储在这个虚拟磁盘下面,所以保证C盘空间较大
而wsl --list --verbose可以看一共有几个子系统
- 对于下载了 docker desktop 的时候,会发现有一个叫做
docker desktop的子系统 - 这是 docker desktop 专门创建的子系统。但是实际上由于docker descktop占内存,应该直接使用docker cli的
- 而在非
docker desktop子系统中也可以使用docker的原因是docker desktop的设置有个wsl integration,其他的wsl也可以使用docker
/mnt下面是挂载的宿主机的内容
任何重新设置之后要先wsl --shutdown然后再启动
WSL 配置
# .wslconfig 文件
[wsl2]
networkingMode=Mirrored
localhostForwarding=false
dnsProxy=false
guiApplications=false # 禁用 GUI,防止剪切板内容泄露;需要的时候可以重新开启
[experimental]
autoProxy=true
dnsTunneling=true
firewall=true
bestEffortDnsParsing=true
sparseVhd=true
# /etc/wsl.conf
[boot]
systemd=true
[user]
default=xxx
[automount] # 取消自动挂载
enabled=false
mountFsTab=true # 允许挂载指定目录
[interop] # 不允许运行 Windows 程序
enabled=false
appendWindowsPath=false
mountFsTab=true的作用是挂载/etc/fstab文件中的指定目录。比如说一些 IDE 需要利用宿主机中下载好的无头操作文件对 WSL 进行连接,那么我们可以编辑/etc/fstab:
//localhost/c$/Users/<user_name>/AppData/Local/Zed/remote_servers /mnt/c/Users/<user_name>/AppData/Local/Zed/remote_servers drvfs ro 0 0
为了尽最大可能保证 Agent 隔离使用,为 Agent 创建一个专门的用户:
sudo adduser --gecos "" agent # 创建一个名为 agent 的用户
id agent # 确保 agent 这个用户没有在 docker 组和 soduers 组中
此时 WSL 中有两个可以操作的用户。一些 IDE 需要单独为两个用户设置登录方式,以 Zed 为例,如果出现了下图

那么就需要配置:
# settings.json
"wsl_connections": [
{
"distro_name": "Ubuntu",
"user": "xxx",
"projects": [
{
"paths": [
"/home/xxx"
]
}
]
},
{
"distro_name": "Ubuntu",
"user": "agent",
"projects": [
{
"paths": [
"/home/agent"
]
}
]
}
]

浙公网安备 33010602011771号