容器镜像同步加速:3 步配置 DaoCloud public-image-mirror 代理
2026/9/11 14:56:05 网站建设 项目流程

容器镜像同步加速: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/coredns

kind 本地集群把节点镜像换成代理地址即可:

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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询