0. 背景
对于WSL2
来说,安装docker
最方便的方式当然是直接下载安装Docker Desktop
, 不过,对于许多开发者来说,Docker Desktop
的资源占用过高,可能会拖慢系统的运行,且Docker Desktop
的免费版本仅免费提供给个人用户、小型企业和教育机构使用的,存在一定的法律风险。因此,本文将介绍如何在 WSL2
中直接安装和运行 Docker
,这是一种非 Docker Desktop
的方案。
1. 准备工作
1.1. 演示环境
系统版本 | WSL 版本 | Linux 发行版 | Clion 版本 |
---|---|---|---|
Windows 11 Pro 23H2 | 2 | Ubuntu 22.04.3 LTS (Microsoft Store) | 2024.2.0.1 |
本文默认Windows
已完成 WSL2
的安装,我们从 Microsoft Store
下载的纯净发行版开始,演示配置过程。
2. 安装Docker
- 执行安装命令
sudo apt-get update
sudo apt-get install docker.io
- 安装完毕后进行测试
sudo docker run hello-world
- 部分系统可能出现以下错误
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
See 'docker run --help'.
- 尝试启动
dockerd
sudo systemctl start docker
#也可以选择设置开机自启
sudo systemctl enable docker
- 如果发现依然出现以下报错
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
- 原因是你的系统并没有使用
systemd
作为其初始化系统(PID 1
),在没有systemd
的系统上,systemctl
命令是无法工作的。原先的Wsl2
不支持systemd
,而是采用systemv
, 这导致常用的systemctl
无法正常使用,参考官方文档发现,最新版本的Ubuntu
发行版已经默认使用systemd
作为初始化系统, 如果是曾经安装的发行版,可以检查一下WSL
的版本
#使用windows自带的powershell执行以下命令
wsl --version
- 如果低于
0.67.6
,请更新系统,并运行以下指令
#使用windows自带的powershell执行以下命令
wsl --update
- 如果是
0.67.6
或者以上,就可以直接通过以下方法配置systemd
- 打开子系统中的
/etc/wsl.conf
文件,如果没有则创建一个 - 在文件中添加以下配置,保存并退出
[boot]
systemd=true
- 执行以下命令,停止
WSL
#使用windows自带的powershell执行以下命令
wsl --shutdown
- 重新进入发行版,就已经可以在正常使用
systemctl
和docker
了