MirrorPilot 是一个自托管的单二进制面板:对镜像源做四层真实测速、生成 daemon.json、用 GitHub Actions 把 ghcr.io 的镜像搬进你自己的仓库、接入 ddn-k8s 中转。它不坐在你的拉取路径上,也不偷偷改你的配置。
| 镜像源 | 结果 | 连通 | Token | Manifest |
|---|---|---|---|---|
| 1Paneldocker.1panel.live | ok | 1408 ms | — | 529 ms |
| DaoClouddocker.m.daocloud.io | ok | 156 ms | 96 ms | 34 ms |
| 1ms.rundocker.1ms.run | failed | 309 ms | 114 ms | 110 ms |
「哪个镜像源最快」和「这个镜像到底怎么拉」是两个问题——障碍的形状取决于镜像住在哪里。MirrorPilot 把它们分开回答。
四层分离测量:连通(GET /v2/)、Token(匿名令牌,按 registry 点名的 realm 去取,而不是瞎猜端点)、Manifest(首字节 + 本地现算摘要)、吞吐(真拉一个 blob,上限 8 MiB)。知道哪一层挂了,比一片红有用得多。
按实测排名生成 registry-mirrors 顺序(顺序本身就是功能),也生成 containerd 的 hosts.toml。粘贴你已有的 daemon.json,它做合并而不是替换;带注释或尾逗号的文档会被拒绝而不是静默修正——Docker 也不收。
registry-mirrors 只对 Docker Hub 生效。对 ghcr.io / quay.io / gcr.io,正道是借 GitHub Actions 的网络:生成 workflow、写好仓库 secret、一键 dispatch。页面展示的是运行日志,而不是在按钮上假装成功。
中转不是镜像源——镜像源在上游同一路径讲 registry 协议,中转把整条原始地址当路径。内置华为云 SWR 公益 ddn-k8s 的地址风格,设一次端点,任何镜像地址变成一条可直接 pull 的命令。默认关闭,由你决定开不开。
每 30 分钟把启用的源全部重测一遍,排名不会悄悄过时。不需要解锁主密码——测速是公开的 registry 读。
Argon2id 派生密钥 + AES-256-GCM,密文绑定用途(AAD)。GitHub token 的密文挪到别处也解不开。
派生密钥只活在进程内存。容器重启后,必须输入一次密码才能读任何已存凭据——这是设计,不是缺陷。
blob 摘要永远由本地对收到的字节现算,绝不读响应头。指控镜像源发坏内容之前,先排除是我们自己要少了。
把边界说清楚,替你省时间。
2026-09 在国内生产环境真实测得。引擎遵循 registry 的鉴权协议:401 带 realm 是匿名的开场白,没有 realm 的拒绝才被如实报成「需要凭据」。
同一批测出的源可以诚实对比:每次运行都记录 manifest 解析到的 digest——tag 可能命中的是缓存,同一个 tag 在两个源上未必是同一份字节。
两条命令。首次打开网页时创建面板账号——没有默认密码,磁盘上也不预写任何东西。
bash# 拉起来 git clone https://github.com/DC1024/mirrorpilot.git cd mirrorpilot docker compose up -d # 打开面板,创建账号 open http://<host>:8080
或者直接用镜像:docker pull ghcr.io/dc1024/mirrorpilot:latest
daemon.json(生成结果示例){ "registry-mirrors": [ "https://docker.1panel.live", "https://docker.m.daocloud.io", "https://docker.1ms.run" ], "insecure-registries": ["192.168.43.0/24"], "log-driver": "json-file" }
↑ 排名来自你自己的实测,不是别人榜单的转发。已有配置粘贴进去做合并,不属于它的字段原样保留。
数据落在 /data 卷:SQLite、加密凭据、测速历史。重启不丢。
面板保管你的 GitHub / 阿里云凭据,不要裸 HTTP 上公网。README 里有完整的 Caddy 配置(含 IP 直访的 default_sni 坑)。
没有重置链接,也没有恢复密钥——这正是它防住「偷走 /data 卷」的原因。镜像源、设置、测速历史都会保留。