Connect Hyper-V VM from WSL,在Win Docker中挂载hv中的虚拟机smb
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 中管理员是读不到其他用户挂在的网络驱动器。。。
有两个办法,
- 不推荐!!!
在管理员权限中打开的应用中打开任何可以找文件的窗口,也就是windows自带的打开
然后再我的电脑
上右击就可以添加了。。。但是,,,已经添加的无法再添加,其次。。。管理员添加的。。。没法再在普通用户中看到。。。。 - 修改注册表
计算机\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
结束 docker
的 wsl
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