我怀疑这与一个新的windows内部更新有关,但我很困惑。
我尝试过的东西
- 在";Windows功能">
- 以管理员身份运行docker
- 将WSL降级为版本1
- 卸载和重新安装Docker
- 更新和升级Ubuntu
这是日志:
System.InvalidOperationException:
Failed to deploy distro docker-desktop to C:UsersmburkAppDataLocalDockerwsldistro: exit code: -1
stdout: The parameter is incorrect.
stderr:
at Docker.ApiServices.WSL2.WslShortLivedCommandResult.LogAndThrowIfUnexpectedExitCode(String prefix, ILogger log, Int32 expectedExitCode) in C:workspacesPR-15633srcgithub.comdockerpinatawinsrcDocker.ApiServicesWSL2WslCommand.cs:line 146
at Docker.Engines.WSL2.WSL2Provisioning.<DeployDistroAsync>d__17.MoveNext() in C:workspacesPR-15633srcgithub.comdockerpinatawinsrcDocker.DesktopEnginesWSL2WSL2Provisioning.cs:line 169
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Docker.Engines.WSL2.WSL2Provisioning.<ProvisionAsync>d__8.MoveNext() in C:workspacesPR-15633srcgithub.comdockerpinatawinsrcDocker.DesktopEnginesWSL2WSL2Provisioning.cs:line 78
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Docker.Engines.WSL2.LinuxWSL2Engine.<DoStartAsync>d__26.MoveNext() in C:workspacesPR-15633srcgithub.comdockerpinatawinsrcDocker.DesktopEnginesWSL2LinuxWSL2Engine.cs:line 104
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Docker.ApiServices.StateMachines.TaskExtensions.<WrapAsyncInCancellationException>d__0.MoveNext() in C:workspacesPR-15633srcgithub.comdockerpinatawinsrcDocker.ApiServicesStateMachinesTaskExtensions.cs:line 29
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Docker.ApiServices.StateMachines.StartTransition.<DoRunAsync>d__5.MoveNext() in C:workspacesPR-15633srcgithub.comdockerpinatawinsrcDocker.ApiServicesStateMachinesStartTransition.cs:line 67
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at Docker.ApiServices.StateMachines.StartTransition.<DoRunAsync>d__5.MoveNext() in C:workspacesPR-15633srcgithub.comdockerpinatawinsrcDocker.ApiServicesStateMachinesStartTransition.cs:line 92
我试着为你们提供尽可能多的信息,只要评论一下,如果你需要更多,就告诉我。
背景
在更改Nat网络的IP后,我遇到了类似的问题,我正在将其用于我的一个HyperV虚拟机。一旦更改完成,我的HyperV默认网络就消失了,我也不能再在WSL2中使用Ubuntu了。为了解决这个问题,我尝试了许多建议,一个简单的网络重置+在完全删除HyperV、Virtual Machine Platform和Windows Subsystem for Linux后重新启动+在网络重置完成后再次重新启动。然而,错误消息仍然存在。我还试着使用我的WiFi网络创建一个名为WSL的Nat Switch或一个外部Switch,但这也没有帮助。我甚至试着通过升级助手升级到Window11,希望新的操作系统能有一个完全可用的网络设置,但这也没用。
最后,我在事件日志中看到一个错误,指向NetNat服务无法启动。然后,我看到一篇SO文章,指出HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlNsi
下的设置可能存在注册表问题
解决方案
因此,我尝试更彻底地重置我的网络,因为一个或多个网络协议缺失,并使用命令作为管理员进行了完全重置
# release / renew ip + de/reregister dns
ipconfig /release
ipconfig /flushdns
ipconfig /renew
ipconfig /registerdns
# network stack reset
netsh winsock reset catalog
netsh int ipv4 reset reset.log
netsh int ipv6 reset reset.log
netsh int ip reset all ip.log
netsh int ip reset ipreset.log
netsh int tcp reset tcp.log
对于一些netsh命令,我得到了Access is denied.Resetting , OK!
错误。
我通过在Regedit中向所有子密钥授予访问权限来修复这些问题,例如HKEY_LOCAL_MACHINESYSTEMControlSet001ControlNsi{eb004a00-9b1a-11d4-9123-0050047759bc}26
for Everyone(完全访问(,这在文章中有更详细的介绍。
警告:首先通过Regedit导出到文件来备份完整密钥HKEY_LOCAL_MACHINESYSTEMControlSet001ControlNsi
,这样会更加安全
一旦设置了权限,上面的netsh命令就可以正常工作,而不会抱怨访问问题。
然后我删除了HyperV,虚拟机平台和Windows Linux子系统再次重新启动,并在再次重新启动后安装了HyperV。令我高兴的是,在那一步之后,以前丢失的默认网络适配器又出现了。
接下来,我再次重新安装了Linux的虚拟机平台和Windows子系统,并删除了%localappdata%Packages
下规范软件包的旧软件包信息(因为我使用的是Ubuntu((您需要首先通过右键单击"属性"-"安全性"-"高级"-"所有者"(管理员或您的用户都可以(获得所有权,然后在Explorer(。
之后,我通过商店重新安装了包,WSL2再次为我工作。