WSLC 国内镜像源配置指南:解决 wslc pull 超时问题

作者: secflag 分类: 开发工具 发布时间: 2026-10-13 08:50

前言

WSLC (WSL Container) 是微软在 WSL 中新增的容器功能,类似 Docker。但在国内使用时,会遇到一个棘手的问题:无法拉取镜像。

wslc pull alpine:latest
Get "https://registry-1.docker.io/v2/": context deadline exceeded

经过调研和测试,我发现 WSLC 当前版本不支持 registry mirror 配置,但有两种可行的解决方案。本文将详细介绍这两种方法。


问题分析

为什么 wslc pull 会超时?

WSLC 默认从 Docker Hub (registry-1.docker.io) 拉取镜像。由于网络限制,国内用户无法直接访问该地址,导致请求超时。

WSLC 支持镜像源配置吗?

不支持。 通过分析 WSL 源码(src/windows/common/WSLCUserSettings.cpp),确认 settings.yaml 仅支持以下配置项:

session:
  cpuCount: default
  memorySize: default
  maxStorageSize: default
  networkingMode: default
  hostFileShareMode: default
  dnsTunneling: default
  defaultBindingAddress: default
  portRelay: default
credentialStore: default

没有 registryMirrors、insecure-registries 等 Docker 风格的镜像源配置。


解决方案

方案一:使用完整镜像地址直接拉取(推荐)

这是最简单的方法,直接在 wslc pull 命令中指定国内镜像源的完整地址。

基本语法

wslc pull <镜像源地址>/library/<镜像名>:<标签>

实际示例

# DaoCloud(推荐,国内最大最稳定)
wslc pull docker.m.daocloud.io/library/alpine:latest

# 1Panel 提供
wslc pull docker.1panel.live/library/alpine:latest

# Hub Proxy
wslc pull hub.rat.dev/library/alpine:latest

验证

# 查看镜像列表
wslc images

# 运行测试
wslc run --rm docker.m.daocloud.io/library/alpine:latest echo "Hello!"

已验证可用的镜像源

镜像源地址 提供方 状态
docker.m.daocloud.io DaoCloud ✅ 推荐
docker.1panel.live 1Panel ✅ 可用
hub.rat.dev Hub Proxy ✅ 可用
hubp.de HubP ✅ 可用
docker.1ms.run 社区 ✅ 可用

注意:镜像源可能随时失效,建议定期验证。

常用镜像地址对照表

原始镜像 完整拉取命令
alpine:latest wslc pull docker.m.daocloud.io/library/alpine:latest
nginx:latest wslc pull docker.m.daocloud.io/library/nginx:latest
redis:7-alpine wslc pull docker.m.daocloud.io/library/redis:7-alpine
ubuntu:latest wslc pull docker.m.daocloud.io/library/ubuntu:latest
mysql:8.0 wslc pull docker.m.daocloud.io/library/mysql:8.0
node:18-alpine wslc pull docker.m.daocloud.io/library/node:18-alpine
python:3.11-slim wslc pull docker.m.daocloud.io/library/python:3.11-slim

方案二:通过 Docker 导出再导入

如果已经在 Docker 中配置了镜像源,可以先用 Docker 拉取,导出为 tar 文件,再导入 WSLC。

步骤

# 1. 用 Docker 拉取镜像(Docker 已配置镜像源)
docker pull alpine:latest

# 2. 导出为 tar 文件
docker save alpine:latest -o "env:TEMP\alpine-latest.tar"

# 3. 导入到 WSLC
wslc load -i "env:TEMP\alpine-latest.tar"

# 4. 验证
wslc images

批量导入脚本

# wslc-import.ps1
param(
    [Parameter(Mandatory=true)]
    [string[]]Images
)

wslc = "C:\Program Files\WSL\wslc.exe"

foreach (image in Images) {
    Write-Host "Processing:image"

    # 导出
    tarFile = "env:TEMP\(image -replace '[:/\\]', '_').tar"
    docker save image -otarFile

    # 导入
    & wslc load -itarFile

    # 清理
    Remove-Item tarFile -Force

    Write-Host "Done:image" -ForegroundColor Green
}

# 显示结果
& $wslc images

使用方法:

.\wslc-import.ps1 alpine:latest, redis:7-alpine, nginx:latest

两种方案对比

特性 方案一:直接拉取 方案二:Docker 导入
步骤数 1 步 3 步
依赖 仅需 WSLC 需要 Docker
速度 快 较慢(需导出/导入)
灵活性 需记住镜像地址 可用 Docker 生态工具
推荐场景 日常使用 已有 Docker 环境

镜像地址格式说明

使用国内镜像源时,需要在原始镜像名前加上镜像源地址和 /library/ 前缀:

<镜像源地址>/library/<原始镜像名>:<标签>

例如:

  • alpine:latest → docker.m.daocloud.io/library/alpine:latest
  • nginx:stable-alpine → docker.m.daocloud.io/library/nginx:stable-alpine

如果是第三方仓库(如 quay.io、ghcr.io),不需要 /library/ 前缀:

  • quay.io/prometheus/prometheus → docker.m.daocloud.io/quay.io/prometheus/prometheus

Docker daemon.json 配置参考

如果同时使用 Docker,可以在 %USERPROFILE%\.docker\daemon.json 中配置镜像源:

{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://docker.1panel.live",
    "https://hub.rat.dev"
  ]
}

配置后重启 Docker Desktop 生效。


展望

WSLC 目前仍处于 Preview 阶段,希望微软能在后续版本中添加 registryMirrors 配置支持,就像 Docker 的 daemon.json 一样。我已经在 GitHub Issue 中提交了 Feature Request。


总结

  1. WSLC 当前不支持 registry mirror 配置,这是功能缺失
  2. 推荐方案:使用完整镜像地址直接拉取(wslc pull docker.m.daocloud.io/library/xxx)
  3. 备选方案:通过 Docker 导出再导入
  4. 推荐镜像源:DaoCloud (docker.m.daocloud.io),国内最大最稳定

希望本文能帮助到同样遇到这个问题的朋友!


参考资料

来源:https://juejin.cn/post/7657021150954635273
作者:用户8350961085262


发表回复

标签云