Windows中 WSL2 与 Docker Desktop异常解决方案 电脑版发表于:2022/6/23 16:08  >#Windows中 WSL2 与 Docker Desktop异常解决方案 [TOC] tn2>前天,windows关机后第二天再次开机发现docker用不了,发现其中的容器也不见了。 找了很久发现wsl从2变成了1。(非常恶心)【子系统环境Ubuntu 18.04】 所以通过如下命令将它又从wsl1变为wsl2. ```bash wsl --set-default-version Ubuntu-18.04 2 ``` tn2>不出几分钟,改成了原来的wsl2版本。  tn2>接着我们去子系统中的,启动我们的docker容器。 ```bash service start docker ``` tn2>你会发现它过一会就失败,过一会就失败。我们通过如下命令查看日志。 ```bash cat /var/log/docker.log ``` tn2>我这里显示是`can't initialize iptables table 'nat': Table does not exist (do you need to insmod?)` 然后我就去国内外导出找相关质料都不起作用,最后我发现`/run/docker/containerd/containerd.sock`这个文件根本没有。 所以我的解决方法是直接把`/run/docker/`目录删除了。 ```bash rm -rf /run/docker/* ``` tn2>然后再次启动便成功了。 但是service是起来了但是本地都连接不上去。所以得把docker的连接地址更改为`0.0.0.0`. ```bash vim /etc/init.d/docker ... DOCKER_OPTS="-H tcp://0.0.0.0:2375" ... # 保存后重启服务就可以连接上了 service docker restart ``` tn2>再来,Docker Desktop死活次次闪退,不得不卸载Docker Desktop。 `控制面板`-->`程序`-->卸载`Docker Desktop`  tn2>当然这样卸载是卸载不干净的,所以我们还需要删除以下几个目录中的数据。 ```bash C:\Program Files\Docker C:\ProgramData\DockerDesktop C:\Users\你的用户名\.docker C:\Users\你的用户名\AppData\Local\Docker C:\Users\你的用户名\AppData\Roaming\Docker C:\Users\你的用户名\AppData\Roaming\Docker Desktop ``` tn2>然后再次安装Docker Desktop就可以了。 安装完成后,我们将设置wsl2中的`docker-desktop-data`保存到其他磁盘中,这里我们将备份保存到`D:\dockerdata`目录下,然后将现在的数据保存到`D:\dockerdata\wsl`下。 ```bash # 停止所有的wsl wsl --shutdown # 导出docker数据 wsl --export docker-desktop-data D:\dockerdata\docker-desktop-data.tar # 删除docker数据 wsl --unregister docker-desktop-data # 重新导入docker数据 wsl --import docker-desktop-data D:\dockerdata\wsl\ D:\dockerdata\docker-desktop-data.tar --version 2 ``` tn2>然后重启子系统,以及docker。 到现在我们还有一个问题没有解决就是我们的本地挂载问题。 tn>作为程序员我希望大家都能把数据库中的卷存储到本地,不要直接就运行容器,jenkins,容器仓库也是。 tn2>我们直接运行命令挂载windows本地卷是不行的。 需要关闭`Use the WSL 2 based engine`,点击`Apply & Restart`才会显示出`Resources`下的`File sharing`.然后在`File Sharing`下可以选择共享文件的路径。   tn>希望大家这辈子都用不到我这次写的教程,不然太麻烦了。