概览
把 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 dockerDocker(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 containerdKubernetes(下发到每个节点)
把 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 回退到官方源。
会记录我的隐私吗?
只记录请求路径、状态码、字节数与耗时(用于判断线路质量),不记录账号、令牌等凭据。
免责声明:本服务是公益项目,上游全部是第三方公开镜像站,我们无法保证其持续可用,也不对拉取内容的完整性负责。