文章目录
- 前言
- 1. 安装Hyper-V(非专业版Windows11)
- 2. 系统设置
- 3. WSL设置
- 4. 下载并安装发行版Ubuntu22.04
- 5. 更新软件源和软件包
- 6. docker配置
- 7. docker拉取镜像报错,解决办法
- 8. service与systemctl 命令报错问题
- 总结
- 参考
前言
跨平台开发和高效部署已成为开发者们追求的目标。Windows 11通过 WSL2(Windows Subsystem for Linux 2)和Docker的集成,可以为开发者提供强大的工具链,使得在Windows环境下进行Linux开发和容器化部署变得更加便捷。本文将详细介绍如何在Windows 11上配置WSL2和Docker,帮助你快速搭建一个高效、便捷的开发环境。
1. 安装Hyper-V(非专业版Windows11)
由于非专业版 Windows11 没有Hyper-V选项,需要安装Hyper-V。桌面新建文本文档1.txt,输入下面内容
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
修改文件后缀为.bat,管理员身份运行该文件,完成后关闭并重启电脑即可。
2. 系统设置
打开控制面板 -> 程序 -> 启用或关闭Windows功能,开启如下选项。
3. WSL设置
打开cmd命令行窗口,执行如下命令,更新WSL版本到最新
wsl --update
若更新进度缓慢,可以在这里 手动下载最新版进行安装,下载完成后双击打开即可安装。
以管理员身份运行windows power shell,输入以下命令选择WSL版本为WSL2
# 将 WSL 默认版本设置为 WSL 2
wsl --set-default-version 2
4. 下载并安装发行版Ubuntu22.04
下载安装前先检查系统中是否安装了其他系统。
wsl -l -v
进入该链接进行下载:https://learn.microsoft/zh-cn/windows/wsl/install-manual
下载完成后直接双击打开进行安装。
等待弹出界面:
设置用户名和密码(别太复杂,以后会频繁使用)即可安装完成。
5. 更新软件源和软件包
在开始菜单中打开Ubuntu即可运行Ubuntu
先备份原来的软件源:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
编辑软件源:
# 编辑软件源
sudo nano /etc/apt/sources.list
将原来的内容替换为下面的内容(可自行搜索nano编辑文本的快捷键以及如何保存并退出):
deb http://mirrors.aliyun/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun/ubuntu/ focal-backports main restricted universe multiverse
设置完成后保存并退出。
继续在Ubuntu命令行中执行如下命令:
# 更新软件源
sudo apt-get update -y
# 升级所有软件
sudo apt-get upgrade -y
即可完成软件更新。
6. docker配置
# 在 ubuntu 执行
sudo apt-get update # 更新内核
sudo apt-get install ca-certificates curl gnupg #安装依赖
导入 Docker 官方 GPG 密钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
添加Docker官方仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
安装docker
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
测试是否安装成功
docker -v
#运行docker
sudo service docker start
# 然后拉取测试环境
docker pull hello-world
不出现报错即成功。
7. docker拉取镜像报错,解决办法
拉取镜像时出现如下错误:
permission denied while trying to connect to the Dockerdaemonsocket at unix:///var/run/docker.sock:Post"http://%2Fvar%2Frun%2Fdocker,sock/v1.48/images/create?fromImage=hello-world&tag=latest": dial unix /var/run/docker.sock: connect: permission denied
从上面的报错信息上看出,当试图通过socket去连接docker时权限不被允许。这是因为socket需要root用户才能访问,当前用户的权限不够,所以被禁止了。
添加docker的用户组,把当前用户加入组中。
#添加用户组
sudo groupadd docker
#将当前用户<username是你的用户名>添加至用户组
sudo gpasswd -a username docker
#更新用户组
newgrp docker
错误解决,此时作者电脑出现新的错误:
Using default tag: latestMe0u卡Ceededwhi1e61Error response from daemon: Get “https://registry-1.docker.io/v2/”: net/http: request canceled while waiting for connect
Docker 无法连接到 Docker Hub(registry-1.docker.io),可能是由于网络不稳定、代理设置问题等
我们首先 cd 进入/etc/docker/文件夹,创建 daemon.json
sudo touch daemon.json
然后使用nano打开该json文件
sudo nano daemon.json
写入以下内容
{
"registry-mirrors" : [
"https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs",
"https://dockerproxy",
"https://mirror.baidubce",
"https://docker.m.daocloud.io",
"https://docker.nju.edu",
"https://docker.mirrors.sjtug.sjtu.edu",
"https://docker.mirrors.ustc.edu",
"https://mirror.iscas.ac",
"https://docker.rainbond"
]
}
按ctrl +x 退出,选择 y 进行保存,再按回车键返回命令行界面。
重新回到Ubuntu中,重启服务
sudo service docker restart
重新拉取:
docker pull hello-world
成功!
8. service与systemctl 命令报错问题
当运行以下命令时会报错,如果改成 sudo service docker start 则不会报错,这是因为在WSL的ubuntu中默认支持老版本的service命令,但是systemctl命令更强大,因此可以激活该命令。
输入以下命令,发现使用的是SysV init(sysvinit)初始化系统
ps -p 1
解决方式:首先在etc目录下新建文件wsl.conf
sudo nano wsl.conf
然后写入以下内容:
[boot]
systemd=true
保存后,运行 :wsl --shutdown 关闭wsl服务,再重新启动Ubuntu。
成功解决!
总结
本文配置了Windows11(非专业版)下的WSL2和Docker开发环境,并针对配置环境中可能出现的常见错误提供了解决方案。如果有其他问题,欢迎评论区留言讨论。
参考
windows11 安装WSL2全流程
windows11 搭建 WSL2 运行环境(2024)
Windows安装 WSL2、Ubuntu 、docker(详细步骤 , 弃用 docker desktop )
WSL(Windows Subsystem for Linux)安装、迁移D盘、设置默认登录账户、更改root密码和授予普通用户sudo权限
Windows11 WSL中Llinux报错:System has not been booted with systemd as init system (PID 1). Can‘t operate