容器镜像同步加速:3 步配置 DaoCloud public-image-mirror 代理
【免费下载链接】public-image-mirror很多镜像都在国外。比如 gcr 。国内下载很慢,需要加速。致力于提供连接全世界的稳定可靠安全的容器镜像服务。项目地址: https://gitcode.com/GitHub_Trending/pu/public-image-mirror
public-image-mirror 是公开的容器镜像同步镜像服务:你在源镜像地址前加 m.daocloud.io/ 前缀,服务会替你拉取并缓存,国内拉取不再走跨境链路。同步后的镜像 sha256 与源仓库一致。
3 分钟跑通第一次加速拉取
这条命令通过代理地址拉取 nginx 官方镜像,再启动容器确认镜像可用:
docker pull m.daocloud.io/docker.io/library/nginx docker run --rm m.daocloud.io/docker.io/library/nginx nginx -v写地址时有 4 个注意点:
- 加前缀的方式对任意源站有效,是 README 推荐的方式。
- 前缀替换仅限 README 表格里列出的源站,新源站需提 Issue 申请。
- 服务对新镜像会自动触发后台同步,首次拉取可能等待一段时间。
- 固定版本号或 @sha256。latest 属可变 tag,变更后会返回旧数据并重新同步。
拉取成功后,看看缓存是怎么工作的。
看懂懒加载缓存机制
懒加载指服务不预先同步全部镜像,而是你真正请求时才从源仓库取。
README.md 给出了三个缓存数字,排查时心里有数:
- 缓存内容只保留 30 天,过期后重新拉取会再次同步。
- Manifest(镜像元数据)内存缓存 1 小时,tag 变更 1 小时内不会同步。
- Blob(镜像层数据)内存缓存 1 分钟。期间层若到 30 天期限被删除,会报 404。
- 服务每天检查同步情况,保证更新实时。
缓存弄懂了,按你的环境选配置。
按环境配置 docker pull 加速
配置单机 Docker 守护进程
只拉 docker.io 的镜像,可以不改地址。往守护进程配置里加 registry-mirrors,写入 /etc/docker/daemon.json 后重启服务:
{ "registry-mirrors": [ "https://docker.m.daocloud.io" ] }systemctl restart docker⚠️ README 提醒:registry-mirrors 只允许配置 docker.io,各源站内容不同,别把一个镜像地址全局套用。docker.io 之外的源站直接加前缀即可:
docker pull m.daocloud.io/gcr.io/google-containers/pause:3.9配置单机 Podman 镜像
Podman 可以为 docker.io 之外的源站配置 mirror。追加到 /etc/containers/registries.conf,rootless 模式写入 ~/.config/containers/registries.conf:
[[registry]] location = "gcr.io" [[registry.mirror]] location = "gcr.m.daocloud.io"配置 k8s 集群与 CI 流水线
kubeadm 装集群只需改 imageRepository,核心组件镜像不再从原源站下载。k8s.gcr.io 已迁移到 registry.k8s.io,代理对应 k8s.m.daocloud.io:
imageRepository: k8s.m.daocloud.io dns: imageRepository: k8s.m.daocloud.io/corednskind 本地集群把节点镜像换成代理地址即可:
kind create cluster --name kind --image m.daocloud.io/docker.io/kindest/node:v1.22.1排查 k8s 镜像拉取超时,先确认节点守护进程或 containerd 配了镜像代理。节点若完全没走代理,超时就是跨境网络问题。CI 流水线可按 README 建议把批量拉取放在闲时(北京时间 01-07 点),其他时段拥挤。
配置生效后,验证并排查。
排查镜像同步 404 与拉取慢
排障前,先确认镜像在白名单内。项目用 allows.txt 管理可同步的仓库,支持 * 与 ** 通配:
grep '^gcr.io/' allows.txt常见失败原因与解法:
| 原因 | 现象 | 解法 |
|---|---|---|
| 镜像不在白名单 | 404 或直接拒绝 | grep 确认,向项目提 Issue 申请加入 |
| 缓存已过期 | 闲置较久后重拉 404 | 缓存只保留 30 天,重新拉取触发同步 |
| tag 更新后内容未同步 | 仍拉到旧镜像 | Manifest 内存缓存 1 小时,等待或用 @sha256 固定 |
| 拉取 latest 等可变 tag | 返回旧数据并后台重新同步 | 固定版本号或改用 @sha256 |
| 首次拉取新镜像慢 | 同步期间等待时间长 | 懒加载首次取数耗时,闲时 01-07 点安排 |
同步队列页面只保留一小时的记录,趁早查看进度。
✅ 确认生效的办法是对比两个镜像 ID,应当完全一致:
docker pull docker.io/library/nginx docker pull m.daocloud.io/docker.io/library/nginx docker image inspect docker.io/library/nginx --format '{{.Id}}' docker image inspect m.daocloud.io/docker.io/library/nginx --format '{{.Id}}'想再深入,仓库里还有这几条路径。
再看仓库里 3 条路径
- 内网缓存部署文档:用 docker compose 部署一个 registry,代理 remoteurl 指向 m.daocloud.io,得到内网本地缓存。
- 白名单匹配脚本:演示 allows.txt 的通配匹配规则,自己写白名单校验时可以参考。
- 镜像地址规范脚本:给省略写法补齐 docker.io/library/:latest 前缀,写批量拉取脚本时有用。
现在就能做:打开终端执行grep '^docker.io/library/nginx' allows.txt确认镜像在白名单内,再把部署文件里的源地址换成代理地址。
延伸阅读:内网缓存部署文档
【免费下载链接】public-image-mirror很多镜像都在国外。比如 gcr 。国内下载很慢,需要加速。致力于提供连接全世界的稳定可靠安全的容器镜像服务。项目地址: https://gitcode.com/GitHub_Trending/pu/public-image-mirror
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考