
DaoCloud public-image-mirror 镜像加速指南3 种用法从单条命令到全局生效【免费下载链接】public-image-mirror很多镜像都在国外。比如 gcr 。国内下载很慢需要加速。致力于提供连接全世界的稳定可靠安全的容器镜像服务。项目地址: https://gitcode.com/GitHub_Trending/pu/public-image-mirror晚上十点你执行docker pull gcr.io/google-containers/pause:3.9终端停在 Waiting... 半天没动静。不少镜像仓库都部署在国外国内直接拉取又慢又不稳定。DaoCloud 开源的 public-image-mirror 就是干这个的在原始镜像地址前加一个m.daocloud.io/前缀拉取就会先经过国内缓存节点完成镜像同步这一层就叫做镜像加速。项目定位它到底做了什么这个仓库本身不提供后端服务它做两件事第一维护一份白名单 allows.txt决定哪些源站的镜像允许同步新镜像想被加速就往这份名单里加第二公布一套前缀映射规则告诉你在每个源站对应的域名前面该贴什么前缀。和直接拉官方镜像的区别在于懒加载。打个比方它不是提前把仓库里所有镜像搬到国内而是像按需代购——你第一次拉某个镜像时后台才去海外源仓库把数据取回来缓存住之后再拉就是本地直接交付不用再等跨网传输。⚠️ 注意缓存只保留 30 天过期后要重新同步而且 manifest 在内存里有 1 小时的缓存源站 tag 更新后最多一小时才会生效。public-image-mirror 镜像加速流程图上手一加前缀单条命令解决适用场景临时拉一两个镜像不想动任何全局配置。关键命令在完整镜像地址含 registry 域名前面加m.daocloud.io/原地址里的域名不用删# 前缀加在完整地址前其余什么都不用改 docker pull m.daocloud.io/gcr.io/google-containers/pause:3.9效果验证拉取完成后执行docker images能看到本地已存在该镜像想确认能正常启动docker run --rm跑一下即可。 官方 README 里给的最快示例就是docker run -d -P m.daocloud.io/docker.io/library/nginx一条命令拉起来就能看到页面。上手二换域名写法更短适用场景镜像来自少数几个常用源站docker.io、gcr.io、ghcr.io 等希望命令干净一点。关键命令这些源站有专门的替换域名规则见 README 的支持前缀替换的 Registry表格。以 docker.io 为例# docker.io 的镜像可以换成更短的 docker.m.daocloud.io docker pull docker.m.daocloud.io/library/nginx:alpine # 跑起来验证-P 会随机映射端口 docker run -d -P --name nginx-test docker.m.daocloud.io/library/nginx:alpinegcr.io 对应gcr.m.daocloud.ioregistry.k8s.io 对应k8s.m.daocloud.io其余源站在表格里对号入座。效果验证docker ps里容器状态是Up再用curl访问映射出的端口能返回页面说明镜像本身完整可用。上手三改一行配置全局生效适用场景团队机器上不想每次手敲前缀让 Docker 守护进程自己走镜像源。关键配置把下面内容写进/etc/docker/daemon.json重启 Docker 生效{ registry-mirrors: [ https://docker.m.daocloud.io ] }效果验证重启后执行docker info | grep -A2 Registry Mirrors输出里出现https://docker.m.daocloud.io即配置成功。⚠️ 这里有个容易踩的点docker 的 registry-mirrors 只建议配 docker.io 这一站README 明确提醒不要把 docker.io 之外的源站塞进这个配置原因见下面的避坑指南。Kubernetes 场景同理kubeadm 部署时把配置文件里的imageRepository改成k8s.m.daocloud.iokind 建集群时把--image换成m.daocloud.io/docker.io/kindest/node:v1.22.1都是把源仓库地址整体替换掉。最小演练本地核对白名单想确认某个镜像到底能不能被这个服务同步不用真的拉一次浪费时间。先把仓库克隆下来然后用它自带的校验脚本核对git clone https://gitcode.com/GitHub_Trending/pu/public-image-mirror cd public-image-mirror # 传入不带 tag 的镜像路径退出码 0 表示在白名单内 bash hack/verify-allows.sh allows.txt docker.io/library/nginx; echo $?跑完你会看到输出0说明docker.io/library/nginx在 allows.txt 中放心拉取如果输出1代表不在白名单加速服务不会同步它。这套脚本放在 hack/ 目录下hack/verify-allows.sh只负责白名单判断另有hack/correct-image.sh帮你把写歪的镜像名缺域名、缺 tag补全成标准格式提交 Issue 前可以顺手用一下。避坑指南报 not found但海外能直接拉现象docker pull m.daocloud.io/xxx/yyy报镜像不存在同一个镜像在海外源站却能正常拉取。原因这个项目是白名单 限流的公开服务只同步 allows.txt 里的镜像不在名单内的直接拒绝。处理本地跑bash hack/verify-allows.sh allows.txt 不带tag的镜像路径返回 1 就是没在名单里。去项目 Issue 区提交添加申请另外 README 建议把批量拉取任务放在闲时北京时间凌晨 01–07 点其他时段同步队列非常拥挤会明显变慢。同一个镜像时快时慢偶尔 404现象昨天还能拉今天报 404或者拉下来发现 tag 内容和源站对不上。原因懒加载缓存的固有特性——缓存内容只保留 30 天过期被清理后需要重新同步manifest 有 1 小时内存缓存tag 更新后要等缓存过期blob 有 1 分钟缓存期间如果底层数据到了 30 天期限被删就会短暂报 404。处理生产环境优先用sha256:摘要锁定镜像其次是明确版本号的 tag最后才考虑latest这种可变 tagREADME 原话latest 变更后会响应旧数据并且后台会重新同步。碰到偶发 404隔几分钟重新拉一次即可。配了 registry-mirrorsgcr 镜像却没走加速现象/etc/docker/daemon.json里配好了docker.m.daocloud.io但拉 gcr.io、ghcr.io 的镜像速度没变化。原因docker 的 registry-mirrors 只会对 docker.io 的请求做替换每个源站的内容和路由互不相同README 明确警告不要把 docker.io 之外的站点配置给 registry-mirrors。处理gcr.io、ghcr.io 这类源站用加前缀方式m.daocloud.io/gcr.io/...如果团队用的是 Podman它支持给每个 registry 单独配 mirror在/etc/containers/registries.conf里给 gcr.io、quay.io 分别加上对应的*.m.daocloud.io地址就能全覆盖。收尾public-image-mirror 用一份白名单 一套前缀规则把跨网拉镜像的问题收敛成一个加前缀的动作稳定、透明、无需改代码。想继续深入的话两个方向值得看一是按 docs/local-cache/README.md 在机房内网部署一层私有 registry 缓存减少对外网的依赖二是研究仓库配套的限流与同步策略README 顶部列出的公开信息 Issue理解官方如何平衡加速效果与源站压力。【免费下载链接】public-image-mirror很多镜像都在国外。比如 gcr 。国内下载很慢需要加速。致力于提供连接全世界的稳定可靠安全的容器镜像服务。项目地址: https://gitcode.com/GitHub_Trending/pu/public-image-mirror创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考