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

