在 wsl2 中通过 docker desktop 集成原生调用 docker 引擎构建生产镜像,需启用 wsl2、开启 desktop 的 wsl 集成、配置国内镜像源,并采用多阶段 dockerfile 构建、验证及导出镜像。
在 wsl2 中直接使用 docker 命令行构建生产镜像,核心是让 wsl2 发行版(如 ubuntu)能原生调用 docker 引擎——这通常通过 docker desktop 的 wsl2 集成 实现,而非在 wsl2 内单独安装 docker.io。这样既保持开发体验接近 linux,又复用 desktop 提供的稳定引擎和镜像缓存。
确认 WSL2 已就绪并集成 Docker Desktop
确保以下三点已满足,否则后续命令会报 command not found 或 Cannot connect to the Docker daemon:
- WSL2 已启用且设为默认:
wsl --set-default-version 2,运行wsl -l -v查看状态,Ubuntu 行显示2 - Docker Desktop 已安装,并在设置 → Resources → WSL Integration 中勾选你的发行版(如 Ubuntu-22.04)
- 重启 WSL2:在 PowerShell 中执行
wsl --shutdown,再重新打开 Ubuntu 终端
配置国内镜像源加速构建过程
生产镜像常依赖大量基础层(如 python:3.11-slim、node:20-alpine),不配镜像源会导致超时或失败。
- 在 WSL2 的 Ubuntu 中,编辑 Docker 守护配置:
sudo nano /etc/docker/daemon.json - 填入至少一个可用国内镜像地址,例如:
- 保存后重启服务:
sudo service docker restart(注意:此命令仅在 WSL2 内装了 docker.io 时有效;若用 Desktop 集成,则跳过此步,改在 Docker Desktop 设置中配置) - 验证是否生效:
docker info | grep "Registry Mirrors",应看到对应地址
在 WSL2 中构建生产级镜像
构建过程与 Linux 完全一致,关键在于 Dockerfile 设计和上下文管理:
- 在 WSL2 文件系统中(如
~/myapp)创建Dockerfile,避免使用 Windows 路径(如/mnt/c/...)作为构建上下文 - 推荐使用多阶段构建(multi-stage),减小最终镜像体积,例如:
第二阶段:运行环境
FROM python:3.11-slim COPY --from=builder /install /usr/local/lib/python3.11/site-packages COPY . /app WORKDIR /app CMD ["gunicorn", "app:app"]
- 执行构建命令(标签建议含语义和时间,便于追踪):
docker build -t myapp-prod:20260729 . - 构建成功后,用
docker images | grep myapp-prod确认镜像存在
构建后验证与导出(可选)
生产流程中常需离线部署或 CI/CD 流水线交接:
- 启动容器快速验证:
docker run --rm -p 8000:8000 myapp-prod:20260729 - 导出为 tar 包(适用于无网络环境):
docker save -o myapp-prod-20260729.tar myapp-prod:20260729 - 该 tar 文件可在任意 Docker 环境中加载:
docker load -i myapp-prod-20260729.tar











