WSL报错问题,以及对应的Docker错误。

burning_head 2024-07-25 10:37:01 阅读 63

首先明确一下docker 为什么需要WSL,WSL是一个Windows下的Linux子系统,Docker服务(Windows版)需要使用一个Linux子系统,构建自己的容器。 WSL里面可以管理,创建Linux子系统。

遇到问题一开始是在,vscode中,试图用docker运行一个容器,失败,

`docker:error during connect: the error may indicate that the docker daemon is not running: Post "http://"

system cannot find the file specfied.

经查询是docker服务没开启,然后尝试打开docker服务,(启动docker desktop),依旧报错。

在这里插入图片描述

deploying WSL2 distributions

provisioning docker WSL distros: ensuring main distro is deployed: deploying "docker-desktop": importing WSL distro "无法配置 networkingMode Nat)(网络。若要禁用网络,请在C:\\Users\\abc\\.wslconfig中设置“wsl2.networkingMode=None”\r\nError code: Wsl/Service/RegisterDistro/CreateVm/ConfigureNetworking/HNS/ERROR_NOT_FOUND\r\n" output="docker-desktop": exit code: 4294967295: running WSL command wsl.exe C:\WINDOWS\System32\wsl.exe --import docker-desktop <HOME>\AppData\Local\Docker\wsl\main C:\Program Files\Docker\Docker\resources\wsl\wsl-bootstrap.tar --version 2: 无法配置 networkingMode Nat)(网络。若要禁用网络,请在<HOME>\.wslconfig中设置“wsl2.networkingMode=None”

报错的问题是没有配置网络,提示要禁用一下网络,我觉得不行,因为docker pull request 类似于git 都需要网络。(后来发现问题就是这么解决的),但我当时不信,就采用了。

在这里插入图片描述

问题依旧没有解决。又尝试了,依旧是原问题。

在这里插入图片描述

这时候从docker的官方论坛上找到了一个回答,还是外文,看的我很激动。但是要删除所有的镜像和库,我觉得可以,数据都有保存下来。遂尝试。

在这里插入图片描述

这时候问题就开始broken了。起因是这条命令清除了,

wsl中的 docker-desktop-data 的distros。

而docker就是依托这个distros 和另一个初始化的distros 提供服务。

问题开始变成, 在powershell中,输入wsl命令,没有反应,很久才提示,

在这里插入图片描述

docker 的报错变成了

provisioning docker WSL distros: getting WSL distro list: running WSL command wsl.exe C:\WINDOWS\System32\wsl.exe -l -v --all: context deadline exceeded

checking if isocache exists: CreateFile \\wsl$\docker-desktop-data\isocache\: The network name cannot be found.

经多方查证,第一句关键一些,说明wsl提供服务超时。

问题这时候来到wsl出问题了,wsl的重装和卸载在 官方文档中并没有。

但是我们可以查到,是取消 功能中的 Windows for Linux 服务,以及 虚拟机平台。 重启电脑,再开启,重启电脑。

wsl --install好像是需要挂梯子的,详见另外的帖子。

重装服务之后,因为之前的distros 被我删完了,所以重装ubuntu子系统(主要是通过在store里面 添加ubuntu系统,然后点进系统出现问题)。 重装遇到问题,

在这里插入图片描述

正在启动Ubuntu,

但是

wslregisterdistribution failed with error ! 0x80070470

好好好,这个问题。

找到一个看起来有点东西的解答(实际上遇到这个问题的不多)

在这里插入图片描述

尝试,但是失败。很有问题。最终是在github中的issues查到了一个可行的解决办法。

(此时已经重装or重启 n次电脑)

https://github.com/microsoft/WSL/issues/11044

在windows 下面的在windows下面的%UserProfile%文件夹里面,创建一个.wlsconfig,写入以下内容。解决到wsl -l -v能出现结果。

[wsl2]

networkingMode=none



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。