一、方案一:Docker Desktop + WSL 2(推荐,新手友好)
这是微软官方推荐的方式,Docker Desktop 会将 WSL 2 作为后端运行,相比传统 Hyper-V 模式更轻量、性能更好,且无需手动配置端口、网络等。
1. 前置条件
- 已安装 WSL 2(参考之前的内容确认:
wsl -l -v显示发行版版本为 2) - Windows 10 2004+ / Windows 11(建议最新版本)
2. 安装与配置步骤
步骤 1:下载安装 Docker Desktop
- 从 Docker 官网 下载 Windows 版本的 Docker Desktop,双击安装(勾选 "Use WSL 2 instead of Hyper-V")。
- 安装完成后启动 Docker Desktop,首次启动可能需要几分钟初始化。
步骤 2:配置 Docker Desktop 关联 WSL 2
- 打开 Docker Desktop → 设置(Settings)→ Resources → WSL Integration。
- 勾选 "Enable integration with my default WSL distro",并勾选你要关联的 Linux 发行版(如 Ubuntu)。
- 点击 "Apply & Restart" 保存配置,Docker 会自动重启并关联 WSL。
步骤 3:在 WSL 中验证 Docker
打开你的 WSL 终端(如 Ubuntu),执行以下命令,能正常输出版本信息即配置成功:
bash
运行
# 检查 Docker 版本
docker --version
# 检查 Docker 服务状态(无需手动启动,由 Docker Desktop 管理)
docker info
# 运行测试容器(经典的 hello-world)
docker run hello-world
3. WSL 中操作 Docker 的常用命令(与原生 Linux 一致)
bash
运行
# 拉取镜像
docker pull nginx:latest
# 运行容器(映射端口 8080→80,后台运行)
docker run -d -p 8080:80 --name my-nginx nginx
# 查看运行中的容器
docker ps
# 查看所有容器(包括停止的)
docker ps -a
# 停止容器
docker stop my-nginx
# 启动容器
docker start my-nginx
# 删除容器
docker rm my-nginx
# 删除镜像
docker rmi nginx:latest
# 查看容器日志
docker logs my-nginx
二、方案二:WSL 中安装原生 Docker Engine(进阶)
若不想依赖 Docker Desktop(比如需要离线环境、自定义 Docker 配置),可直接在 WSL 2 的 Linux 发行版中安装原生 Docker Engine,步骤如下:
1. 前置准备(以 Ubuntu 为例)
bash
运行
# 更新系统包
sudo apt update && sudo apt upgrade -y
# 安装依赖
sudo apt install -y ca-certificates curl gnupg lsb-release
2. 添加 Docker 官方源
bash
运行
# 添加 Docker GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加源到 apt 列表
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
3. 安装 Docker Engine
bash
运行
# 更新源并安装 Docker
sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io
# 启动 Docker 服务(WSL 中无 systemd,用 service 命令)
sudo service docker start
# 设置开机自启(WSL 重启后需重新启动,可添加到 ~/.bashrc)
echo "sudo service docker start" >> ~/.bashrc
4. 配置免 sudo 操作 Docker(可选)
bash
运行
# 添加当前用户到 docker 组
sudo usermod -aG docker $USER
# 重启终端或执行以下命令生效
newgrp docker
# 验证(无需 sudo 运行)
docker run hello-world
注意事项
- WSL 2 中没有
systemd,无法用systemctl管理 Docker,需用service docker start/stop/restart。 - 每次重启 WSL 后,Docker 服务会停止,需重新执行
sudo service docker start(添加到.bashrc可自动执行)。
三、WSL + Docker 实用技巧
1. 跨系统文件挂载
WSL 中可直接挂载 Windows 目录到容器,比如将 Windows 的 C:\projects 目录挂载到 Nginx 容器的网页目录:
bash
运行
# /mnt/c 对应 Windows 的 C 盘,路径需用 Linux 格式
docker run -d -p 8080:80 -v /mnt/c/projects:/usr/share/nginx/html --name my-nginx nginx
2. 端口访问
- WSL 中运行的 Docker 容器,Windows 可直接通过
localhost:端口访问(如localhost:8080访问上面的 Nginx)。 - 其他设备访问需确保 Windows 防火墙放行对应端口。
3. 镜像 / 容器数据持久化
- 建议将 Docker 镜像、容器数据存储在 WSL 的 Linux 目录(如
/home/你的用户名/docker),而非/mnt/c等 Windows 目录,避免 IO 性能损耗。
四、常见问题排查
-
WSL 中执行 docker 命令提示 "permission denied"
- 原因:未将用户加入 docker 组,或 Docker 服务未启动。
- 解决:执行
sudo service docker start启动服务,或按方案二步骤 4 配置免 sudo。
-
Docker Desktop 提示 "WSL 2 is not installed"
- 原因:WSL 版本未切换到 2,或虚拟机平台未启用。
- 解决:执行
wsl --set-default-version 2,并确保 Windows 功能中勾选 "虚拟机平台"。
-
容器端口无法访问
- 检查容器是否正常运行:
docker ps。 - 检查 Windows 防火墙是否放行对应端口。
- WSL 2 中避免用
0.0.0.0绑定端口,直接用容器默认配置即可。
- 检查容器是否正常运行:
总结
- 新手优先选 Docker Desktop + WSL 2:无需手动配置服务,Docker 由 Desktop 管理,开箱即用,兼容所有 Docker 命令。
- 进阶场景用原生 Docker Engine :适合需要自定义 Docker 配置、脱离 Windows 桌面环境的场景,注意 WSL 无 systemd 需用
service管理服务。 - 核心技巧 :WSL 中操作 Docker 时,优先使用 Linux 本地目录挂载容器,避免跨 Windows 目录导致 IO 性能下降,端口访问直接用
localhost即可。