在使用 WSL 的 ubuntu-20.04 linux 子系统初学安装和使用 docker 时遇到了这个问题
我之前从 Microsoft Store 中下载了 ubuntu-20.04 的子系统尝鲜。
在后期学习 docker 的时候,想把 docker 安装到 linux 子系统里。
于是使用“菜鸟安装”的方式,把 docker 安装到了 WSL 的 linux 里面,即使用了命令:
$ apt-get update $ wget -qO- https://get.docker.com/ | sh
安装完成后使用命令检查,就出现了问题
$ docker version
Client: Docker Engine - Community
Version: 20.10.6
API version: 1.41
Go version: go1.13.15
Git commit: 370c289
Built: Fri Apr 9 22:47:17 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
$ _
提示以上错误信息,发现 docker 服务根本起不来,只有客户端是活着的。
去找了很多答案都和我的问题不符,也没法解决。关键点在于我使用了 WSL 的 linux 子系统,情况可能比较特殊。
之后,先是找到了 windows 10 对于 WSL 的官方文档指导 文档 。
在疑难解答的位置被指引到了另外一篇文章: windows 10 上的如何在适用于 Linux (WSL2)的 Windows 系统中设置 Docker 。
这篇文章作者对比说明了 WSL1 和 WSL2 的一些问题(其实是着重推荐了一波 WSL2)。
在翻阅文章的过程中,又被导引到了 Docker 官方文档对于 WSL2 的操作说明 Docker Desktop WSL2。
官方文档中说明 docker 目前对 WSL2 的支持已经非常完备了,并且强烈推荐使用 WSL2 来配合 docker 使用,这也是官方推荐的最佳方式。
这时我就想到是不是因为使用“菜鸟安装”脚本的最新版本 docker 和我的 WSL 版本不匹配造成的。因为我尝鲜 WSL 子系统比较早,那时候可能用的还不是 WSL2 。
于是我根据安装指南中的操作,对 WSL 执行检查:
C:> wsl.exe -l -v NAME STATE VERSION * Ubuntu-20.04 Running 1 docker-desktop-data Running 2 docker-desktop Running 2
结果发现我的 ubuntu20.04 是 WSL1 而不是 WSL2 ,是不是这个问题还不确定,但是我还是决定先升级 WSL2 试试看:
C:> wsl.exe --set-version ubuntu-20.04 2 正在进行转换,这可能需要几分钟时间... 有关与 WSL 2 的主要区别的信息,请访问 https://aka.ms/wsl2 转换完成。
升级过后在 Windows Terminal 中重新打开 ubuntu-20.04,再次运行 docker version 检查,发现仍然有问题。
然后我重新启动 docker,并检查 docker 的运行状态,发现 docker 可以正常启动了,问题解决。
总结:问题原因是 docker 版本和 WSL2 版本都太新,很多人应该还没有遇到这样的情况。如果你在 windows 10 1909 之前就尝鲜过 WSL,
你安装的 linux 子系统一定是 WSL1 的,那么很有可能你也会遇到这个问题。不妨先用 wsl.exe -l -v 命令检查一下 WSL 的版本。
WSL2 是在 1909 之后微软才推出的,所以需要把 WSL1 文件系统升级到 WSL2 即可解决问题。
2021年4月15日00点15分 ——codingR