问题现象

在 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 虚拟化进程异常退出;
vmcompute.exe application error ID 1000
vmcompute-application-error-1000.png

解决方法

通过查找各种相关资料,发现是 win10 系统自带的安全机制,在虚拟化嵌套的环境下才会出现的问题;
需要在 win10 上针对 Hyper-V 的这两个应用程序关闭 Exploit Protection 防护中的 CFG 控制流保护机制;

具体配置方法如下:
打开windows 安全中心 ==> 应用和浏览器控制
win10-security-center.png

点击Exploit Protection设置
Exploit-Protection-Setting.png

添加应用程序绝对路径
Exploit-Protection-Setting2.png

设定应用程序CFG选项, 取消勾选 “替代系统设置”
Exploit-Protection-Setting3.png

重启win10系统
Docker-Desktop 运行正常,不再出现自动停止和报错问题!

Last modification:March 24, 2023
如果觉得我的文章对你有用,请随意赞赏