DaoCloud 容器镜像加速指南:从前缀替换到缓存核验的 4 步验证
【免费下载链接】public-image-mirror很多镜像都在国外。比如 gcr 。国内下载很慢,需要加速。致力于提供连接全世界的稳定可靠安全的容器镜像服务。项目地址: https://gitcode.com/GitHub_Trending/pu/public-image-mirror
从国内网络拉取 ghcr.io 上的镜像,经常出现超时和 ImagePullBackOff。本文以 DaoCloud 公开镜像 m.daocloud.io 为例,带你完成镜像前缀替换、地址规范化、白名单检查、缓存一致性核验四步操作,预计耗时 10 分钟。
背景与原理
大量开源镜像托管在 gcr.io、ghcr.io 等国外仓库,国内直连速度不稳定。DaoCloud 镜像是源仓库的 Mirror:首次拉取时懒加载回源同步并缓存,之后拉取直接命中国内缓存。关键特性:sha256 与源完全一致;缓存内容保留 30 天;manifest 内存缓存 1 小时,即源端 tag 更新后最多延迟 1 小时同步。另外,只有 allows.txt 白名单内的镜像会被同步,该文件目前有 1327 行。
| 对比项 | 直连源仓库 | 经 DaoCloud 镜像 |
|---|---|---|
| 链路 | 国内直连国外 Registry | 命中国内节点缓存 |
| 完整性 | 取决于源站稳定性 | sha256 与源一致 |
| 重复拉取 | 每次都回源 | 30 天内缓存命中 |
实操步骤
以下脚本位于项目仓库,先克隆:
git clone https://gitcode.com/GitHub_Trending/pu/public-image-mirror cd public-image-mirror替换镜像地址前缀并用 DaoCloud 镜像拉取
目的:最简单的加速方式,无需任何客户端配置。
docker pull m.daocloud.io/ghcr.io/immich-app/immich-server:release成功判据:拉取完成后docker images能列出该镜像。
📌 关键提示:前缀法要保留完整原始地址(含ghcr.io域名),这与"前缀替换"(把域名换成ghcr.m.daocloud.io)是两种不同的写法,不要混用。
用 correct-image.sh 规范化镜像地址格式
目的:手写地址(如 hub.docker.com/r/xxx)常因域名、tag 缺失导致拉取 404,hack/correct-image.sh 可一键标准化。
bash hack/correct-image.sh "hub.docker.com/r/library/nginx" # 输出:docker.io/library/nginx:latest成功判据:输出的地址包含域名和 tag 各恰好一份。
关键提示:首段不含点号的地址会自动补docker.io/,没有 tag 的自动补:latest,输出即最终可拉取的完整地址。
用 verify-allows.sh 校验镜像白名单
目的:白名单是镜像能被同步的前提,不在名单里直接拉取会长时间等待。
bash hack/verify-allows.sh allows.txt ghcr.io/immich-app/immich-server echo $? # 输出 0 表示在白名单内,1 表示不在成功判据:退出码为 0。
关键提示:校验时传不带 tag 的镜像(白名单按仓库粒度匹配);若你需要的镜像未收录,可按项目说明提交需求。
配置 Docker registry-mirrors 加速 docker.io
目的:对 docker.io 下的镜像做一次配置,省去逐镜像加前缀。
// /etc/docker/daemon.json { "registry-mirrors": ["https://docker.m.daocloud.io"] }该配置只对 docker.io 的拉取生效。
systemctl restart docker docker info | grep -A1 "Registry Mirrors"成功判据:输出中包含https://docker.m.daocloud.io。
⚠️ 关键提示:不要把 docker.io 之外的源站配进 registry-mirrors,各源站内容不同,配置错会适得其反。
结果验证
第一条,验证拉取耗时:
time docker pull m.daocloud.io/ghcr.io/immich-app/ml-worker:release成功判据:1–3 分钟内完成。参考 DaoCloud 侧的测量:直连国外仓库平均 30 分钟以上、失败率约 40%,经镜像后通常为 1–3 分钟、失败率低于 0.1%。
第二条,验证哈希一致性:
docker inspect --format='{{.RepoDigests}}' m.daocloud.io/ghcr.io/immich-app/ml-worker:release成功判据:输出的 sha256 与源仓库同一 tag 的 digest 相同,说明拉到的内容与源一致。
注意事项与进阶
- ⚠️ 优先用
@sha256:指定镜像,其次明确版本 tag,最后才是 latest。latest 这类可变 tag 在源更新后可能仍响应旧数据,且受 1 小时 manifest 缓存延迟影响。 - 批量拉取安排在北京时间 01–07 点闲时执行,项目方明确提示其他时段服务拥挤。
- 不要假设缓存长期有效。内容只保留 30 天,过期后需重新同步;blob 删除前后存在短暂 404 窗口,重试一般即可恢复。
- 纯内网环境建议再部署一层本地 registry 缓存,方法见 docs/local-cache/README.md,核心配置即把本地 registry 指向上游:
proxy: remoteurl: https://m.daocloud.io ttl: 2160h部署后把拉取前缀从m.daocloud.io换成内网ip:端口即可,用法不变。
DaoCloud 镜像的本质是白名单加懒加载同步,你只需要处理地址与状态核验,同步过程由服务自动完成。最新支持的源站列表和白名单以仓库内 README.md 与 allows.txt 为准。
【免费下载链接】public-image-mirror很多镜像都在国外。比如 gcr 。国内下载很慢,需要加速。致力于提供连接全世界的稳定可靠安全的容器镜像服务。项目地址: https://gitcode.com/GitHub_Trending/pu/public-image-mirror
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考