Docker 镜像加速源

三种接法(Docker / containerd / Kubernetes)+ 显式前缀 + 验证排障,按顺序照做即可。

目录

概览

把 https://cdnjs.mhimg.cn/docker 填进 Docker 的 registry-mirrors, 之后的 docker pull 会自动择优走本站聚合的线路。

  • 公开、免费、无需注册;
  • 不做本地缓存:源站零落盘,纯转发,避免「缓存里躺着错字节」;
  • 只对 docker.io(不带域名的镜像名)生效;其它仓库用 显式域名前缀。
上游全部是第三方公开镜像站,请在生产环境保留官方源作为回退,并对镜像做 digest / 签名校验。

快速开始

三步走:写入配置 → 重启 Docker → 拉一个小镜像验证。

写入并重启 Docker
sudo tee /etc/docker/daemon.json >/dev/null <<'EOF'
{
    "registry-mirrors": [
        "https://cdnjs.mhimg.cn/docker"
    ]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

Docker(daemon.json)

如果文件已存在,只需把 registry-mirrors 这一项合并进去(注意 JSON 逗号)。

daemon.json
{
    "registry-mirrors": [
        "https://cdnjs.mhimg.cn/docker"
    ]
}

containerd(K8s / nerdctl 环境)

Kubernetes 新版本默认使用 containerd,需要改 config.toml:

/etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
  [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
    endpoint = ["https://cdnjs.mhimg.cn/docker"]

改完执行:

重启 containerd
sudo systemctl restart containerd

Kubernetes(下发到每个节点)

把 ConfigMap 挂载到节点的 /etc/docker/daemon.json,再重启 docker。

ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
  name: docker-daemon-mirror
data:
  daemon.json: |
    {
      "registry-mirrors": ["https://cdnjs.mhimg.cn/docker"]
    }

不改配置:显式域名前缀

registry-mirrors 只对 docker.io 生效;要拉 ghcr.io / quay.io / 私有 registry 的镜像,在镜像名前面拼上 cdnjs.mhimg.cn/docker/ 即可,不需要改配置、不需要重启。

显式前缀
# 不改 daemon.json 也能用:把镜像名前面加上本站域名前缀
docker pull cdnjs.mhimg.cn/docker/library/alpine:3.19
docker tag  cdnjs.mhimg.cn/docker/library/alpine:3.19 alpine:3.19
docker pull cdnjs.mhimg.cn/docker/library/nginx:1.25

验证是否生效

自检命令
# 1) 探活:返回 200 或 401 都算正常(401 表示需要换取匿名令牌)
curl -sS -o /dev/null -w "%{http_code}\n" https://cdnjs.mhimg.cn/docker/v2/

# 2) 看 Docker 实际使用的镜像源
docker info | grep -A5 "Registry Mirrors"

# 3) 拉一个小镜像验证
docker pull alpine:3.19

常见问题

速度能到多少?

本服务不做本地缓存,完全转发到上游公益镜像站,上限取决于上游。 聚合多条线路主要改善可用性,不会让总带宽叠加。

为什么不缓存?

零落盘意味着不占磁盘、不需要淘汰策略、也不会出现「缓存里躺着错字节」。 Docker 客户端本身会在本地保留层缓存,重复拉取通常不需要再走网络。

拉取失败怎么办?

调度器每轮都会体检所有线路,故障线路会被自动摘除并在一段时间后重试; 也可以直接删掉 registry-mirrors 回退到官方源。

会记录我的隐私吗?

只记录请求路径、状态码、字节数与耗时(用于判断线路质量),不记录账号、令牌等凭据。

免责声明:本服务是公益项目,上游全部是第三方公开镜像站,我们无法保证其持续可用,也不对拉取内容的完整性负责。