wsl2上折腾docker
wsl2上折腾docker
背景
上次重新整了下电脑上的WSL2: https://notes.z-dd.online/2023/11/07/WSL2%E7%9B%B8%E5%85%B3/
现在需要在上面弄下docker,以为和在真机上一样,后来发现还有比较大的差异,所以在此记录下
环境:
- Windows 11 家庭中文版(22H2)
- WSL2(2.0.9.0)
- WSL Ubuntu20.04发行版
问题
在wsl上安装的Ubuntu20.04里,默认好像已经安装了docker,有docker等命令
但是使用docker pull
命令拉取镜像报错:
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
See 'docker run --help'.
wsl2不支持systemctl命令,所以执行如下命令先启动docker:
service docker start
但是报错:
docker: unrecognized service
正确的打开方式是:使用 Docker Desktop
Docker Desktop
前提:首先安装好WSL2,可参考之前的博文
安装并配置 Docker Desktop
借助 Docker Desktop for Windows 中支持的 WSL 2 后端,可以在基于 Linux 的开发环境中工作并生成基于 Linux 的容器,同时使用 Visual Studio Code 进行代码编辑和调试,并在 Windows 上的 Microsoft Edge 浏览器中运行容器。
具体步骤:
下载 Docker Desktop 并按照安装说明进行安装。这里略过,和普通软件安装大同小异。
启动 Docker Desktop (最好以管理员方式启动),并进入设置界面。
确保在“设置”>“常规”中选中“使用基于 WSL 2 的引擎”
转到“设置”>“资源”>“WSL 集成”,从要启用 Docker 集成的已安装 WSL 2 发行版中进行选择。
若要确认已安装 Docker,请打开 WSL 里的发行版(例如 Ubuntu),并通过输入
docker --version
来显示版本和内部版本号然后就可以和在真机上面一样,“愉快地玩耍了”!
在发行版里使用docker命令行操作,或者在 Docker Desktop 面板上也可进行有关操作,同步相关状态
如果使用平时使用 VScode 在Docker 和 WSL 2 进行开发,可以使用如下扩展:
- WSL
- Dev Containers
- Docker
遇到的问题
启动 Docker Desktop 后一直转圈并显示:
“starting the Docker Engine”
解决过程:
确认是否已启用Hyper-V虚拟机
windows11家庭中文版没有内置Hyper-V虚拟机,需要自己手动安装
即下面的选项开始是没有的:确认CPU是否已开启虚拟化
可在任务管理器中性能部分,看虚拟化是否已启用确认Docker服务是否已开启
已管理员方式运行终端,执行以下命令:net start com.docker.service
以管理员身份运行 Docker Desktop,第一次需要的时间要久点
安装Hyper-V
新建批处理文件,内容如下:
pushd "%~dp0"
dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt
for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"
del hyper-v.txt
Dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL
右键以管理员方式运行,最后输入“Y”重启电脑后即可