«

Connect Hyper-V VM from WSL,在Win Docker中挂载hv中的虚拟机smb

学长 发布于 阅读:352 AI


https://stackoverflow.com/questions/61868920/connect-hyper-v-vm-from-wsl-ubuntu

Get-NetIPInterface | where {$_.InterfaceAlias -eq 'vEthernet (WSL (Hyper-v firewall))' -or $_.InterfaceAlias -eq 'vEthernet (Default Switch)'} | Set-NetIPInterface -Forwarding Enabled

https://learn.microsoft.com/en-us/windows/wsl/networking
嗯。。。大概就是。。。wsl2是的hostname是跟windows主机是同一个名字。。。所以ping WSL的虚拟交换机无法实现。。。
那问题就是怎么把hyper V的虚拟机加入到WSL的虚拟交换机中。。。

防火墙设置
https://learn.microsoft.com/en-us/windows/security/operating-system-security/network-security/windows-firewall/hyper-v-firewall
基本上就这一个设置,如果没法加入hyper v的默认交换机 执行

Set-NetFirewallHyperVVMSetting -Name '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}' -DefaultInboundAction Allow

就可以打开hv数据接入了

ping 不通。。。
https://blog.csdn.net/gelinyin/article/details/140364562
因为默认的公开网络是关闭这些的。。。

最后发现问题出在一个设备的默认网关设置成了上层设备的网关
而不是虚拟设备所在层的网关。。。
也就是说我们设置的是两个虚拟设备的默认网关应该都是两个虚拟交换机的主机所在位置,而不是上层物理路由的网关。。。

wsl -d docker-desktop
mount -t cifs -o username=用户名,password=密码 //虚拟机IP/共享文件夹 /mnt/host//挂载点

确定没问题就fstab

//虚拟机IP/共享文件夹 /mnt/host//挂载点 cifs username="用户名",password="密码",iocharset=utf8,nofail 0 0

其实主要是因为windows 中管理员是读不到其他用户挂在的网络驱动器。。。
有两个办法,

  1. 不推荐!!!
    在管理员权限中打开的应用中打开任何可以找文件的窗口,也就是windows自带的 打开
    然后再 我的电脑上右击就可以添加了。。。但是,,,已经添加的无法再添加,其次。。。管理员添加的。。。没法再在普通用户中看到。。。。
  2. 修改注册表
    计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
    添加一个 DWORD
    名称:EnableLinkedConnections
    值:1

debian中是
mount -t drvfs Z: /mnt/z
docker的wsl中是
mount -t drvfs Z: /mnt/host/z
就可以挂在了,大概是因为我总是再管理员模式的终端中运行wsl吧。。。
fstab中 vi /etc/fstab

Z:      /mnt/host/z     drvfs   nofail  0 0

esc -- :wq -- exit 保存退出对应的 wsl
结束 dockerwsl

wsl -t -d docker-desktop

然后

wsl -d docker-desktop
ls /mnt/host/z

看看是否正常挂载了

使用过程中发现重启后有挂在顺序还有不在终端中运行 wsl
写一段 bat然后设置个计划任务

@echo off
title Docker Delay Start
echo delay 2min for docker
timeout /t 120 /nobreak
wsl -d docker-desktop ls /mnt/host/z
start "" "D:\UX\Docker\Docker Desktop.exe"

120是延迟秒数
/mnt/host/z是检查挂载路径
"D:\UX\Docker\Docker Desktop.exe"Windwos中docker的路径

这个延迟秒数不固定的,因为如果正常关机truenas只是挂起而不是关机,恢复很快

但是如果是完全关机(不小心断电)那么truenas的启动时间在2min以上。

所以还是用判断目录是否存在比较合理

@echo off
chcp 65001 > nul
title Docker Delay Start
:A
IF EXIST Z:\ (
    echo "SMB已挂起,检测Z盘内容"
    wsl -d docker-desktop ls /mnt/host/z
    echo "运行docker"
    start "" "D:\UX\Docker\Docker Desktop.exe"
    timeout /t 10
) else (
    echo "SMB 没挂起,继续等待"
    timeout /t 10 /nobreak
    cls
    goto A
)

如果存在才去运行docker并且等10秒然后关闭,不存在就继续等10秒循环,

计划任务在我的电脑右键管理--任务计划程序
新建一个
只在用户登陆时运行
触发器:登陆时
操作中添加运行程序上面那个 bat文件

然后在开启该用户的自动登录
https://iheld.net/post-246.html


扫描二维码,在手机上阅读