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 浏览器中运行容器。

具体步骤:

  1. 下载 Docker Desktop 并按照安装说明进行安装。这里略过,和普通软件安装大同小异。

  2. 启动 Docker Desktop (最好以管理员方式启动),并进入设置界面。

  3. 确保在“设置”>“常规”中选中“使用基于 WSL 2 的引擎”
    wsl_docker_setting1.png

  4. 转到“设置”>“资源”>“WSL 集成”,从要启用 Docker 集成的已安装 WSL 2 发行版中进行选择。
    wsl_docker_setting2.png

  5. 若要确认已安装 Docker,请打开 WSL 里的发行版(例如 Ubuntu),并通过输入 docker --version 来显示版本和内部版本号

  6. 然后就可以和在真机上面一样,“愉快地玩耍了”!

在发行版里使用docker命令行操作,或者在 Docker Desktop 面板上也可进行有关操作,同步相关状态

wsl_docker.png

如果使用平时使用 VScode 在Docker 和 WSL 2 进行开发,可以使用如下扩展:

  • WSL
  • Dev Containers
  • Docker

遇到的问题

启动 Docker Desktop 后一直转圈并显示:

“starting the Docker Engine”

解决过程:

  1. 确认是否已启用Hyper-V虚拟机
    windows11家庭中文版没有内置Hyper-V虚拟机,需要自己手动安装
    即下面的选项开始是没有的:
    Hyper.png

  2. 确认CPU是否已开启虚拟化
    可在任务管理器中性能部分,看虚拟化是否已启用

  3. 确认Docker服务是否已开启
    已管理员方式运行终端,执行以下命令:

    net start com.docker.service
  4. 以管理员身份运行 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”重启电脑后即可

参考