关于卸载BlueStacks后遇到的问题

BlueStacks 是一个超强的安卓模拟器,由于最近有需求所以安装了一个 BlueStacks。但是在遇到了一系列问题后我决定卸载,然而因此我又遇到了一系列问题......

为什么我要卸载 BlueStacks?

因为他不和 HyperV 兼容,虽然 BlueStacks5 兼容,但是他不能打开 Root,所以我把他卸载了。

虽然 BlueStacks4 有 HyperV 兼容版本,但是几乎随时都在崩溃,所以也抛弃了。

在我安装完毕 BlueStacks5 后我发现我的 Docker 服务启动失败,仔细一想应该是 HyperV 被 BlueStacks5 的引擎占用了所以没有在意,在卸载 BlueStacks5 后甚至以为重启一下就行,但是我错了,错的还非常严重

噩梦就此开始。

噩梦

首先我的 Docker 服务启动失败了,

DockerError

然后我的 WSL2 无法启动

WSL2Error

随后我检查了我的系统功能配置

SysConfig

检查了我的虚拟化配置

SysConfig2

他们都是正常的

重新打开关闭了他们,重启后依然遇到了这些问题,完全无法解决

非常绝望,在这个时候甚至想重装 Windows,但是综合考虑到代价又感觉似乎太重了,还是搁置等某一天能自动解决这个问题

直到我脑子一闪想到了在 Docker 不支持 WSL2 后端时候打开 HTTP API 的方法:通过 socket 工具把数据暴露出来

或许 Docker 现在用了 WSL2 后端也依赖 socket?而且 HyperV 内的 WSL2 和外界通信也需要使用 socket?

Windows 不是 UNIX-like 系统,早就去掉了 POSIX 子系统,所以 Windows 内多半有一个 socket 管理器,那么 Windows 内部的 socket 管理器是不是被 BlueStacks 改过?

醒梦

经过资料的查询,果然 Windows 内部为了支持 UNIX 的 Socket 和一系列其他网络协议做了 winsock,但是没有查找到相应的 BlueStack 会修改 winsock 的资料

然而我查到了 winsock 会导致 WSL2 无法工作的 issue

当然 WSL2 无法工作意味着 Docker 也无法工作

Winsock module breaks WSL2

经过推测,没办法得出结论,只能死马当活马医了

在这个 issue 里面我发现了这么一条

i cannot use WSL 2 and proxifier at the same time, netsh winsock reset will fix it temporarily.

同时在这里有一个跳转,跳转到 Docker 的项目,在这里它提到了一条很重要的信息

there was a bug with microsoft/WSL#4177

想必就是 WSL2 的问题了,我回去继续看解决方法。

但是 issue 中其他回复对我是无用的,所以我只找到了这一条大概是有效的命令

1
netsh winsock reset

字面上看,重置 netsh 服务当中的 winsock。

事实证明它成功了,我的 WSL2 又活了过来,Docker 也正常工作了

总结

虽然搞的莫名其妙,噩梦的非常莫名其妙,修好系统也是莫名其妙,但是总归是修好了。

还好有一点 Docker 可能和 socket 相关的记忆,让我想到了 Docker 启动失败是否和 socket 有关,抓住了一点点线索完成了修复

另外现在好像也没有 HyperV 兼容的安卓模拟器,真难过


关于卸载BlueStacks后遇到的问题
https://blog.krysztal.dev/2021/06/27/关于卸载BlueStacks后遇到的问题/
作者
Krysztal
发布于
2021年6月27日
许可协议