问题现象
在 ESXi 主机内嵌套虚拟了一个 win10 用来跑 docker-desktop,按照要求给win10 启用了客户机CPU虚拟化支持;并启用了 Hyper-v 和 wsl 组件;docker-desktop 安装一切正常,但是在导入或启动 docker 容器,或者是容器正常运行一段时间后,容器就会自行挂掉,并报无法连接的错误;
powershell 下执行 wsl -l -v
会发现 docker-desktop 状态为 RUNNING,但是 docker-desktop-data 的状态为 STOP;正常应该两个都是 RUNNING。
此时在 Docker-desktop 应用程序界面上看不到任何的容器存在,因为此时 docker-desktop-data 容器挂掉了;
查看 win10 的系统事件日志,会发现有 vmcompute.exe 和 vmwp.exe 的 application error 事件ID:1000
确定是 win10 的 Hyper-V 虚拟化进程异常退出;
解决方法
通过查找各种相关资料,发现是 win10 系统自带的安全机制,在虚拟化嵌套的环境下才会出现的问题;
需要在 win10 上针对 Hyper-V 的这两个应用程序关闭 Exploit Protection 防护中的 CFG 控制流保护机制;
具体配置方法如下:
打开windows 安全中心 ==> 应用和浏览器控制
点击Exploit Protection设置
添加应用程序绝对路径
设定应用程序CFG选项, 取消勾选 “替代系统设置”
重启win10系统
Docker-Desktop 运行正常,不再出现自动停止和报错问题!