近期发现win下的docker desktop for windows
无法启动,
报出以下错误
Failed to set version to docker-desktop: exit code: -1
stdout: �S ��v�[a�{|�W N/e c \Ջ�v�d\O 0
不要点Rest to factory defaults
按钮,不仅无法解决问题还会带走所有的docker数据😱
为啥这么个危险的按钮在这里啊😭
查了很久有治标不治本的方法,执行 netsh winsock reset
后好使了,但是再次重启后就在此出现此错误
🥺也不能天天重置啊,,
再查看了docker的帮助文档
跑了自我诊断工具
& "C:\Program Files\Docker\Docker\resources\com.docker.diagnose.exe" check
找到了这个错误
is the WSL 2 Linux filesystem corrupt? exit status 0xffffffff
怕docker中的数据库丢了,先备份一下docker-desktop-data
虽然已经丢了。。
#导出
wsl --export docker-desktop-data 指定文件地址.tar
#如 wsl --export docker-desktop-data P:\wsl\wsl2\docker-desktop-data.tar
#导入
wsl --import docker-desktop-data 指定安装的地址 指定文件地址.tar
#如 wsl --import docker-desktop-data P:\wsl\wsl2\docker-desktop-data P:\wsl\wsl2\docker-desktop-data.tar
然后查了半天发现不是这个问题,是所有的wsl系统都无法使用了
报出参考的对象类型不支持尝试的操作
错误😳??查了半天是wsl不好使了,,
解决方案参考这篇文章
ISSUES
关键的信息摘抄
原文如下
Thanks for the info.
We have reproduced this issue.
Apparently, wsl.exe displays this error if Winsock LSP DLL gets loaded into its process.
The easiest solution is to use WSCSetApplicationCategory WinAPI call for wsl.exe to prevent this.
Under the hood the call creates an entry for wsl.exe at HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters\AppId_Catalog
This tells Windows not to load LSP DLLs into wsl.exe process.
We have a tool that can make this call:
www.proxifier.com/tmp/Test20200228/NoLsp.exe
Please just run as admin with the full path to wsl.exe as the parameter:
NoLsp.exe c:\windows\system32\wsl.exe
This has fixed the problem in my case.
Please let me know how it works for you.
翻译(机翻稍加修改)
谢谢你的信息。
我们复制了这个问题。
很明显,如果Winsock LSP DLL被加载到其进程中,wsl.exe就会出现此错误
最简单的解决方案是为wsl.exe调用WSCSetApplicationCategory WinAPI来防止出现这种情况
在注册表中为wsl.exe创建一个项HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters\AppId_Catalog
告诉Windows不要将LSP DLL加载到wsl.exe进程中。
我们有一个工具可以进行此调用:
www.proxifier.com/tmp/Test20200228/NoLsp.exe
请使用wsl.exe的完整路径以管理员身份运行作为参数:
NoLsp.exe c:\windows\system32\wsl.exe
这解决了我的问题。
请让我知道它是如何为你工作的。
我选择了改注册表
在\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters\AppId_Catalog\
添加了一个项392EB46D
(不重复即可)
名称 | 类型 | 值 | 进制 |
---|---|---|---|
AppFullPath | 字符串值 | C:\Windows\System32\wsl.exe | \ |
PermittedLspCategories | DWORD (32位)值 | 800000 | 十六进制 |
重启一下docker就复活了(不重启也行,手动重启docker,在命令行里杀掉docker-desktop,docker-desktop-data,再挨个启动就行了)