WSL 安装 CentOS 7 完整指南:从镜像导入到 Docker 集成
Windows 应用商店里没有现成的 CentOS 发行版,但通过手动导入 rootfs 的方式,完全可以跑一个原生的 CentOS 7 WSL 实例。本文从零开始,覆盖镜像获取、WSL 导入、系统初始化、Docker Desktop 集成的全流程,最终实现一个开箱即用的 CentOS 7 开发环境。
前置条件
- Windows 10 1903+ 或 Windows 11
- 已启用 WSL 2(
wsl --install) - 已安装 Docker Desktop(非必须,但本文基于 Docker 导出镜像,最方便)
一、获取 CentOS 7 的 WSL 镜像
思路:通过 Docker 拉取官方 CentOS 7 镜像,导出 rootfs,再导入 WSL。
打开 PowerShell,执行:
powershell
# 创建临时工作目录
mkdir C:\wsl-centos
cd C:\wsl-centos
# 拉取 CentOS 7 镜像
docker pull centos:7
# 启动临时容器并导出根文件系统
docker run -d --name centos-temp centos:7 tail -f /dev/null
docker export centos-temp -o centos7.tar
# 清理临时容器
docker rm -f centos-temp
执行完成后,C:\wsl-centos\centos7.tar 就是我们需要的 rootfs 文件。
💡 为什么选 CentOS 7? CentOS 8 已于 2021 年底停止维护,CentOS 7 仍在 ELS 期内,且与龙蜥 Anolis OS 7 高度兼容,是最稳妥的选择。如果你的生产环境是 Rocky Linux / AlmaLinux,操作步骤完全一致,只需替换对应镜像名。
二、将 CentOS 导入 WSL
在 PowerShell 中执行导入命令:
powershell
wsl --import CentOS7 C:\wsl-centos-home C:\wsl-centos\centos7.tar --version 2
参数说明:
表格
| 参数 | 含义 |
|---|---|
CentOS7 |
WSL 发行版名称,可自定义 |
C:\wsl-centos-home |
vhdx 磁盘文件存放目录 |
C:\wsl-centos\centos7.tar |
上一步导出的 rootfs |
--version 2 |
指定 WSL 2 |
验证导入结果:
powershell
wsl -l -v
正常情况下应看到 CentOS7,VERSION 为 2。
三、启动并初始化系统
3.1 进入系统
powershell
wsl -d CentOS7
默认以 root 身份登录。
3.2 安装基础工具
bash
yum install -y passwd sudo wget curl
3.3 创建普通用户
bash
# 创建用户并设置密码
useradd -m deploy
passwd deploy
# 加入 wheel 组,赋予 sudo 权限
usermod -aG wheel deploy
# (可选)设置 wheel 组免密 sudo
echo "%wheel ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
3.4 设置默认登录用户
先 exit 退出 WSL,回到 PowerShell:
powershell
# 终止实例
wsl --terminate CentOS7
# 查找 CentOS7 的注册表路径并设置默认用户
$distro = Get-ChildItem HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss\ | Where-Object { $_.GetValue("DistributionName") -eq "CentOS7" }
Set-ItemProperty -Path $distro.PSPath -Name "DefaultUid" -Value 1000
⚠️
1000是 Linux 中第一个普通用户的默认 UID。如果不确定,可以先在 WSL 中执行id deploy确认。
设置完成后重新进入:
powershell
wsl -d CentOS7
此时应该以 deploy 用户登录,而不是 root。
四、集成 Docker Desktop
这一步让你在 CentOS 7 里直接使用宿主机 Docker Desktop 的 Docker 引擎,不需要在 WSL 内再装一遍 Docker。
4.1 开启集成
- 打开 Docker Desktop → Settings → Resources → WSL Integration
- 在列表中找到
CentOS7,勾选启用 - 点击 Apply & Restart
4.2 验证
重新进入 CentOS7,测试:
bash
docker --version
docker run hello-world
看到 Hello from Docker! 即说明集成成功。
五、部署项目测试
5.1 传输文件
方式一:通过 Windows 资源管理器
在资源管理器地址栏输入:
plaintext
\\wsl$\CentOS7\home\deploy
直接拖拽文件进去即可。
方式二:从 Windows 盘符拷贝
bash
cp -r /mnt/c/Users/你的用户名/Desktop/project-deploy ~/
5.2 启动服务
bash
cd ~/project-deploy
docker compose up -d
💡 如果
docker compose不识别,说明是旧版格式,可以尝试docker-compose up -d(需要单独安装docker-compose)。但集成了 Docker Desktop 后,一般docker compose(中间有空格)即可用。
六、Docker 环境清理与重建
部署过程中经常会遇到镜像损坏、容器状态异常等问题,最彻底的解决方式就是完全清理后重新拉取。下面是安全的清理 + 重建流程。
6.1 完全清理现有环境
进入部署目录,依次执行:
bash
cd /home/deploy/project-deploy
# ① 停止并删除项目所有容器、网络(保留数据卷,数据库数据不会丢)
docker compose down
# ② 删除项目相关的镜像(重新启动时会自动拉取)
docker rmi mysql:8.0.32 redis:6.2.13 nginx:alpine minio/minio:latest elasticsearch-ik:8.5.2 2>/dev/null
# ③ 清理所有悬空镜像和构建缓存
docker system prune -a -f --volumes
各命令说明:
表格
| 命令 | 作用 | 安全性 |
|---|---|---|
docker compose down |
移除容器和项目网络,不删数据卷 | ✅ 安全,MySQL/Redis/MinIO 数据保留在宿主机映射目录 |
docker rmi ... |
删除指定镜像 | ✅ 安全,只是清除镜像层,下次 up 会重新拉取 |
docker system prune -a -f --volumes |
删除所有未被容器引用的镜像、网络、构建缓存 | ⚠️ 会清理未被使用的数据卷,但 compose down 保留的命名卷不受影响 |
⚠️ 如果
docker rmi提示 "image is being used by a stopped container",说明有停止的容器仍在引用该镜像,先执行docker compose down即可解决。
6.2 重新启动所有服务
一次性删除所有已停止的旧容器
docker container prune -f
清理完成后,重新拉取镜像并启动:
docker compose up -d
此时所有镜像会重新拉取。如果某个镜像持续拉取失败(比如自定义的 elasticsearch-ik:8.5.2),说明该镜像源不可用,有两个处理方式:
方式一:更换为官方镜像 + 手动装插件
修改 docker-compose.yml 中 ES 的镜像为官方版本,然后在容器内安装 IK 插件。
方式二:暂时跳过 ES
在 docker-compose.yml 中注释掉 cc-elasticsearch 服务,先确保其他组件正常:
yaml
# cc-elasticsearch:
# image: elasticsearch-ik:8.5.2
# ...
6.3 检查启动状态
bash
# 查看所有服务状态
docker compose ps
# 实时查看日志,确认是否有异常
docker compose logs -f
正常状态应该所有服务都是 Up,如果某个服务持续 Restarting,用以下命令单独排查:
bash
# 查看某个服务的详细日志
docker compose logs cc-elasticsearch
# 查看容器退出原因
docker inspect --format='{{.State.ExitCode}}' <容器名>
💡 完成清理重建后,如果还有问题,重点关注
docker compose logs中的错误信息,常见原因有:端口冲突、内存不足(ES 默认需要 2G+)、数据卷权限等。
七、龙蜥 Anolis OS 替代方案
如果你的生产环境是龙蜥,可以按完全相同的流程导入 Anolis OS 镜像:
powershell
# 拉取龙蜥镜像
docker pull openanolis/anolisos:7.9
# 导出、导入步骤同上,只需替换镜像名和导出文件名
docker run -d --name anolis-temp openanolis/anolisos:7.9 tail -f /dev/null
docker export anolis-temp -o anolis7.tar
docker rm -f anolis-temp
wsl --import AnolisOS7 C:\wsl-anolis-home C:\wsl-centos\anolis7.tar --version 2
龙蜥与 CentOS 7 二进制兼容,RPM 包可以直接互换,测试结论可复用。
常见问题
Q:wsl --import 报错"操作超时"?
A:确保 WSL 2 已正确安装且处于运行状态。可以先执行 wsl --update 更新 WSL 内核。
Q:Docker 命令在 CentOS 里提示找不到?
A:检查 Docker Desktop 的 WSL Integration 是否已勾选 CentOS7,并确认 Docker Desktop 处于运行状态。
Q:如何卸载这个 CentOS7?
A:wsl --unregister CentOS7,然后手动删除 C:\wsl-centos-home 目录即可。
Q:如何设置 CentOS7 为默认 WSL 发行版?
A:wsl --set-default CentOS7,之后直接输入 wsl 就进入 CentOS7。
Q:docker rmi 报错 "image is being used by a stopped container"?
A:先执行 docker compose down 清理容器,再删除镜像。或者直接跳过这步,docker system prune -a -f 会一并处理。
Q:ES 容器一直 Restarting 怎么办?
A:最常见原因是内存不足,ES 默认需要 2G+。可以在 docker-compose.yml 中加环境变量 ES_JAVA_OPTS=-Xms512m -Xmx512m 限制 JVM 内存,或者暂时注释掉 ES 服务先跑其他组件。
总结
表格
| 步骤 | 核心命令 |
|---|---|
| 导出 rootfs | docker export centos-temp -o centos7.tar |
| 导入 WSL | wsl --import CentOS7 C:\wsl-centos-home centos7.tar --version 2 |
| 创建用户 | useradd -m deploy && passwd deploy |
| Docker 集成 | Docker Desktop → WSL Integration → 勾选 CentOS7 |
| 部署测试 | docker compose up -d |
| 环境清理重建 | docker compose down && docker system prune -a -f --volumes && docker compose up -d |
整个过程 10 分钟内可以搞定,最关键的就是通过 Docker 导出 rootfs 再导入 WSL 这一步。有了这个 CentOS 7 环境,配合 Docker Desktop 的集成,基本可以在 Windows 上模拟出一个接近生产环境的 Linux 开发机。遇到镜像损坏或容器状态异常时,按第六章的流程清理重建即可恢复。