news 2026/8/19 12:15:50

镜像卡在 gcr.io 出不来?public-image-mirror 容器镜像加速实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
镜像卡在 gcr.io 出不来?public-image-mirror 容器镜像加速实战指南

镜像卡在 gcr.io 出不来?public-image-mirror 容器镜像加速实战指南

【免费下载链接】public-image-mirror很多镜像都在国外。比如 gcr 。国内下载很慢,需要加速。致力于提供连接全世界的稳定可靠安全的容器镜像服务。项目地址: https://gitcode.com/GitHub_Trending/pu/public-image-mirror

上周我在一台新机器上部署 Kubernetes 控制面,卡在gcr.io拉镜像这一步整整两个小时:重试超时、换网络、手动导出再导入……折腾到怀疑人生。最后同事丢给我一个方案——public-image-mirror,一个由 DaoCloud 维护的容器镜像加速项目。它的核心逻辑简单到一句话:把国外镜像仓库的地址,原样映射到国内可达的m.daocloud.io域名下。我加了个前缀再拉,同一个镜像从十几分钟变成十几秒。这篇文章就把整套玩法拆给你:从单条命令到内网缓存,从 Docker 到 Kubernetes,一次讲透。

先搞清楚一件事:它到底帮你干了什么

很多人一听"镜像加速"就想到自建代理,其实 public-image-mirror 的思路完全不一样:

  • 它只是源镜像仓库(Registry)的Mirror,也就是镜像站的镜像站。
  • 所有 hash(sha256)都和源保持一致,采用懒加载机制:你拉的时候它才从源同步,绝不给你造一个"变味"的镜像。
  • 项目每天检查各仓库的同步情况,保证热门镜像基本实时可用。

换句话说,你不需要信任什么"第三方改编版",你拿到的还是那个官方镜像,只是运输路径变了。这一点对生产环境尤其重要——hash 对得上,安全底线就在。

选它而不是自建代理的三个理由

我知道你可能已经在想:"那我干脆自己搭个代理不行吗?" 行,但先看完这张对比再决定:

维度自建代理公共代理源public-image-mirror
上手成本要维护服务器和证书配置即用配置即用
改动量要改一堆仓库地址加前缀即可加前缀即可
稳定性取决于你的带宽看运营商心情每天检查同步,白名单透明
镜像一致性自己保证不透明sha256 与源一致(懒加载)

三个理由,一个比一个实在:

  1. 改动最小:只是名称映射,不需要改任何代码。你的 Dockerfile、Helm、yaml 全部原样,只在地址前加前缀。
  2. 稳定可靠:每天自动检查同步情况,还有同步队列(queue.m.daocloud.io/status/)和服务状态监控页面可以随时查。
  3. 覆盖面广:gcr.io、docker.io、quay.io、ghcr.io、registry.k8s.io、mcr.microsoft.com、nvcr.io 这些高频仓库全在支持列表里。

10 秒上手:给镜像地址加个前缀

先别想复杂了,最快的一条命令长这样:

docker run -d -P m.daocloud.io/docker.io/library/nginx

原理一句话:在完整镜像地址前面,原样加上m.daocloud.io/前缀

docker.io/library/busybox ↓ 加前缀 m.daocloud.io/docker.io/library/busybox

完成这一步,你就得到了一条从国内直连、几乎不会超时的拉取链路。注意这里要写完整地址(包含docker.io/),不要自作聪明把它去掉——这正是前缀法最大的优点:规则无脑,任何镜像都能套,不怕记错映射关系。

这个方法适合所有场景:docker run、docker compose、Kubernetes 的 image 字段,甚至 CI 流水线里都能用,属于"保底方案"。

想让地址更短?试试前缀替换

如果嫌m.daocloud.io/docker.io/library/nginx太长,项目还为常见仓库准备了前缀替换的玩法,把域名直接映射成xxx.m.daocloud.io

源站替换为备注
docker.elastic.coelastic.m.daocloud.io
docker.iodocker.m.daocloud.io
dhi.iodhi.m.daocloud.io
gcr.iogcr.m.daocloud.io
ghcr.ioghcr.m.daocloud.io
k8s.gcr.iok8s-gcr.m.daocloud.io已迁移到 registry.k8s.io
registry.k8s.iok8s.m.daocloud.io
mcr.microsoft.commcr.m.daocloud.io
nvcr.ionvcr.m.daocloud.io
quay.ioquay.m.daocloud.io
registry.ollama.aiollama.m.daocloud.io实验内测中

用起来长这样:

docker.io/library/busybox ↓ 前缀替换 docker.m.daocloud.io/library/busybox

一句话说清适用场景:图省事、想要短地址,就用替换法;图保险、不想记规则,就用前缀法,官方也是更推荐前缀法的。这里有个特别提醒:每个源站的内容都不一样,⚠️不要把 docker.io 之外的站点配到 Docker 的 registry-mirrors 里,那是给 docker.io 专用镜像加速的,配错了轻则无效、重则报错。

避开这 6 个坑,拉取成功率直接拉满

这些坑我基本都踩过,直接给你避坑清单,一条一条对:

  1. 挑时间拉:白天高峰很挤,把拉取任务放在凌晨(北京时间 01–07 点)会快很多,实测差距明显。⏰
  2. @sha256:锁死镜像:优先用 digest 固定版本,其次用明确的 tag(如v1.22.1),最后才考虑latestlatest这种可变 tag 更新后,旧数据会被响应且后台要重新同步。
  3. 缓存只有 30 天:项目缓存的内容只保留 30 天,过期后会重新同步,冷门镜像第一次拉偏慢是正常现象。
  4. tag 更新有延迟:Manifest 内存缓存 1 小时,也就是说上游 tag 更新后大约 1 小时才会同步新的,别刚发布就去拉然后怀疑人生。
  5. 偶发 404 别慌:Blob 内存缓存只有 1 分钟,期间如果 blob 刚好到 30 天期限被删了,可能报 404,重试一般就好。
  6. 先确认镜像在白名单里:项目用allows.txt维护支持列表,动手之前先看一眼你的镜像在不在里面,省得白等。

进阶:Kubernetes 全家桶一次提速到位

如果你的痛点是 Kubernetes 拉镜像慢,下面这套组合拳按需取用,都是可直接抄的配置。

kubeadm 安装控制面——改两行imageRepository即可:

apiVersion: kubeadm.k8s.io/v1beta3 kind: ClusterConfiguration 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

containerd——参考官方 hosts 文档配置 registry host namespace;如果你用 kubespray 装的 containerd,直接配containerd_registries_mirrors变量,一行搞定。

Docker daemon——把加速站加进全局镜像源,之后所有docker pull自动走加速:

{ "registry-mirrors": [ "https://docker.m.daocloud.io" ] }

Podman——在配置文件里为多个 registry 分别声明 mirror:

[[registry]] location = "docker.io" [[registry.mirror]] location = "docker.m.daocloud.io" [[registry]] location = "gcr.io" [[registry.mirror]] location = "gcr.m.daocloud.io"

Podman 有个 Docker 给不了的优势:它支持给docker.io 之外的 registry 配 mirror,gcr、ghcr、quay、registry.k8s.io 都能配,配置方式照葫芦画瓢。

企业级玩法:把加速站搬进内网

团队人多、镜像量大,公共站扛不住?那就部署一个本地缓存代理,让内网所有机器共享缓存。原理很简单:用一个带 proxy 模式的 registry,把m.daocloud.io当上游。

先写一个docker-compose.yml

services: registry: image: m.daocloud.io/docker.io/library/registry:3 restart: unless-stopped ports: - 8888:8888 command: - /etc/docker/registry/config.yml volumes: - cache-data:/var/lib/registry configs: - source: registry-config target: /etc/docker/registry/config.yml configs: registry-config: content: | version: 0.1 storage: delete: enabled: true filesystem: rootdirectory: /var/lib/registry http: addr: :8888 proxy: remoteurl: https://m.daocloud.io ttl: 2160h volumes: cache-data: {}

启动它:

docker compose up -d

然后让每台机器把本地仓库加进 insecure-registries:

{ "insecure-registries": ["<your-registry-ip>:<your-registry-port>"] }

重启 Docker 后,<your-registry-ip>:<your-registry-port>/就成了m.daocloud.io/的本地缓存代理。用法和加前缀一模一样:

docker pull <your-registry-ip>:<your-registry-port>/docker.io/library/nginx:latest

第一个拉的人走公网,后面的全走内网缓存,速度直接起飞 🚀。这份配置在项目里有完整文档,对应源码路径是docs/local-cache/README.md,照着抄就行。

偷懒大法:Webhook 自动替换所有镜像

不想改任何 yaml、helm、Dockerfile?那就让"劫持"发生在 Pod 创建那一刻。用 repimage 这个工具部署一个 Webhook,它会自动把集群里所有新建 Pod 的 image 改写成加速地址,你的业务清单一个字都不用动:

kubectl create -f https://files.m.daocloud.io/github.com/wzshiming/repimage/releases/download/latest/repimage.yaml kubectl rollout status deployment/repimage -n kube-system

注意上面这个安装地址本身就是走files.m.daocloud.io加速的,连部署工具这一步都是快的。它特别适合存量集群——尤其是那些躺着几百个旧 Deployment、一个个改 image 要改到天荒地老的老项目。

彩蛋:Ollama 和 DeepSeek 模型也能加速

最后给搞 AI 的朋友一个彩蛋。装 Ollama 同样可以走加速源,CPU 版:

docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama docker.m.daocloud.io/ollama/ollama

有 GPU 就加个参数:

docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama docker.m.daocloud.io/ollama/ollama

启动之后,连模型下载都能加速(DeepSeek-R1 实验内测中):

docker exec -it ollama ollama run ollama.m.daocloud.io/library/deepseek-r1:1.5b

写在最后

回到开头那个场景:同样是部署 Kubernetes 控制面,现在我的流程是"给镜像地址加前缀 → 直接拉 → 几分钟进集群"。这中间差的不只是两小时,是每次碰墙之后想砸键盘的怨气。public-image-mirror 给我的感觉就是:方案足够简单,简单到你不会再想换别的

如果你也被镜像拉取折磨过,建议直接上手试一条命令,成本几乎为零。用完觉得香,欢迎一起把它养得更肥:

  • 发现常用镜像不在支持列表?去仓库的 Issue 区提需求,白名单靠社区共建。
  • 想动手改代码?仓库里的hack/目录就是维护白名单的工具集,verify-allows.shfmt-image-match.shverify-image-match.sh这些脚本改完记得跑一遍校验。

需要拉源码的话:

git clone https://gitcode.com/GitHub_Trending/pu/public-image-mirror

少踩一个坑,就多省一小时。去试试吧。

【免费下载链接】public-image-mirror很多镜像都在国外。比如 gcr 。国内下载很慢,需要加速。致力于提供连接全世界的稳定可靠安全的容器镜像服务。项目地址: https://gitcode.com/GitHub_Trending/pu/public-image-mirror

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/19 12:15:31

一步到位修复CK2乱码:汉化补丁安装与排查完全指南

一步到位修复CK2乱码&#xff1a;汉化补丁安装与排查完全指南 【免费下载链接】CK2dll Crusader Kings II double byte patch /production : 3.3.4 /dev : 3.3.4 项目地址: https://gitcode.com/gh_mirrors/ck/CK2dll 老周上周末翻出了吃灰两年的《十字军之王II》&#…

作者头像 李华
网站建设 2026/8/19 12:14:05

RCS限制性立方样条结果解读:连续变量的非线性效应

RCS样条分析结果解读一、方法简介限制性立方样条&#xff08;Restricted Cubic Splines, RCS&#xff09;是一种灵活的非参数回归方法&#xff0c;用于探索连续型自变量与因变量之间可能存在的非线性关系。RCS通过在自变量的取值范围内设置若干节点&#xff08;knots&#xff0…

作者头像 李华
网站建设 2026/8/19 12:13:26

自8.13日起,微博CLI大降价,全面升级

一个终端&#xff0c;接管你的微博运营如果你还没听说过 weibo-cli&#xff0c;这是个可以在终端里直接调用微博能力的命令行工具。装好之后&#xff0c;发博、评论、转发、搜热搜、查用户数据、看粉丝画像&#xff0c;一条命令搞定。更关键的是——它也是 AI Agent 可以调用的…

作者头像 李华
网站建设 2026/8/19 12:13:24

百万token上下文模型实战:从环境搭建到长文本测试完整指南

这类工具最值得先看的不是功能列表&#xff0c;而是能不能在普通环境里稳定跑起来&#xff0c;以及它宣称的“百万 token 上下文”到底意味着什么。对于开发者来说&#xff0c;一个能处理超长代码库或文档的模型&#xff0c;核心价值在于减少上下文切换和人工拼接的成本&#x…

作者头像 李华
网站建设 2026/8/19 12:11:12

AI Agent赋能WEB自动化:从动态页面解析到电商数据采集实战

这次我们来看一个关于 AI Agent 在 WEB 逆向领域应用的实战项目。标题“WEB逆向已死”虽然有些夸张&#xff0c;但它点出了一个核心趋势&#xff1a;传统依赖人工分析、断点调试的逆向工程方式&#xff0c;在面对复杂、动态、反爬机制层出不穷的现代网站时&#xff0c;效率瓶颈…

作者头像 李华