
10分钟搞定容器镜像加速难题public-image-mirror新手实战指南【免费下载链接】public-image-mirror很多镜像都在国外。比如 gcr 。国内下载很慢需要加速。致力于提供连接全世界的稳定可靠安全的容器镜像服务。项目地址: https://gitcode.com/GitHub_Trending/pu/public-image-mirror晚上十一点同事都下班了你还在盯着终端里docker pull的进度条。镜像来自 gcr.io卡在 0% 已经二十分钟。别急着怀疑网络问题多半出在容器镜像加速这件事上——而 public-image-mirror 这个开源项目正是专门用来解决这类痛点的容器镜像加速工具。那个永远拉不动的镜像问题到底出在哪先还原一个真实场景你按官方文档执行docker pull gcr.io/google-samples/hello-app:1.0结果等了十分钟进度条几乎没动最后直接报deadline exceeded。你换了镜像源、清了 DNS 缓存、甚至怀疑是公司防火墙但问题依然存在。真正的原因其实很简单gcr.io、ghcr.io、quay.io 这些镜像仓库的服务器基本都部署在海外而 Docker 拉镜像时要在公网走完整的 HTTPS 链路。跨洋链路延迟高、带宽小再加上国内访问海外节点经常绕路慢就成了必然。这也是为什么很多人一到 Kubernetes 环境就头疼——registry.k8s.io上的组件镜像一个比一个大集群还没建起来先被拉镜像耗掉了半天。一句话讲透原理镜像加速就像快递中转站public-image-mirror 的思路非常朴素它在国内搭了一整套镜像仓库把海外源仓库的内容映射到自己的域名下。你不需要代理、不需要改代码只要把镜像地址加一个前缀请求就会先发往国内节点由它替你完成跨境下载。你可以把它理解成一个快递中转站海外仓库是发货方你的服务器是收货方中转站提前把货备在离你最近的仓库里你取件自然就快了。更重要的是这个中转站是懒加载的——你第一次拉某个镜像时它才去同步所有哈希值sha256与源仓库完全一致不会出现加速后镜像被篡改的隐患安全性和源站是对等的。三步验证一条命令搞定镜像加速上手成本低到超出你的想象不需要注册账号不需要任何配置。在终端里执行docker run -d -P m.daocloud.io/docker.io/library/nginx对比一下原始地址是docker.io/library/nginx加速后的地址只是在最前面加了m.daocloud.io/前缀仅此而已。如果你发现这条命令能顺利拉取说明这套镜像加速方案在你的网络环境下是通的接下来就可以按需升级玩法了。镜像加速的三种配置路径从零配置到一劳永逸路径一加前缀推荐把m.daocloud.io/加在原始镜像地址最前面任何仓库、任何 tag 都适用简单且不会出错docker pull m.daocloud.io/docker.io/library/busybox docker pull m.daocloud.io/gcr.io/google-samples/hello-app:1.0路径二前缀替换地址更简短对于常用仓库项目还提供了前缀替换的简化地址把仓库域名整体替换成对应的加速域名即可。例如docker.io/library/busybox可以写成docker.m.daocloud.io/library/busybox。支持替换的源站如下节选源站替换为docker.iodocker.m.daocloud.iogcr.iogcr.m.daocloud.ioghcr.ioghcr.m.daocloud.ioquay.ioquay.m.daocloud.ioregistry.k8s.iok8s.m.daocloud.iomcr.microsoft.commcr.m.daocloud.ionvcr.ionvcr.m.daocloud.io需要留意的是这些替换规则是人工维护的官方更推荐路径一的加前缀方式因为它对所有镜像一律适用不用记表。路径三全局配置一劳永逸如果你不想每次手改镜像地址可以给 Docker 配置全局镜像加速。编辑/etc/docker/daemon.json{ registry-mirrors: [https://docker.m.daocloud.io] }重启 Docker 后未指定完整地址的镜像会自动走加速通道。这里有个关键提醒registry-mirrors 只对 docker.io 的镜像生效gcr.io、ghcr.io 等其他源站不要配到这一项里它们需要单独处理。Kubernetes 环境下的镜像加速实操如果你在部署 kubeadm、kind 这类集群工具可以直接把镜像仓库替换为加速地址apiVersion: kubeadm.k8s.io/v1beta3 kind: ClusterConfiguration imageRepository: k8s.m.daocloud.iokind create cluster --name kind --image m.daocloud.io/docker.io/kindest/node:v1.22.1对于已经跑起来的集群最省心的方式是部署一个 Webhook 工具repimage它会在新 Pod 创建时自动改写 image 字段不需要改任何 yaml 和 helm chartkubectl create -f https://files.m.daocloud.io/github.com/wzshiming/repimage/releases/download/latest/repimage.yaml kubectl rollout status deployment/repimage -n kube-system如果你的集群使用 containerd也可以参考官方文档为它配置 registry mirror效果与 Docker 的全局配置类似。进阶玩法企业级内网镜像缓存部署指南如果团队规模大、镜像拉取频繁每次都走公网中转也不是最优解。此时建议在企业内网部署一个本地缓存仓库把m.daocloud.io再代理一层。完整步骤可以看 docs/local-cache/README.md核心就是一个 Docker Compose 配置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: filesystem: rootdirectory: /var/lib/registry http: addr: :8888 proxy: remoteurl: https://m.daocloud.io ttl: 2160h volumes: cache-data: {}启动用一条命令docker compose up -d。之后团队拉镜像只需把内网地址加在原始镜像前docker pull 内网IP:8888/docker.io/library/nginx:latest第一次拉取时会回源同步之后所有请求都命中本地缓存对内网环境的加速效果立竿见影还能大幅减少出口带宽消耗。镜像加速常见问题排查与避坑清单拉取还是很慢高峰期尤其白天中转站很拥挤。建议把批量拉取任务放在凌晨 01:00-07:00北京时间其他时段可能排队。用 latest 标签总是出问题latest 是可变标签每次变更后台都要重新同步。优先使用sha256:指定镜像其次用明确的版本号最后才考虑 latest。刚推的新 tag 拉不到服务的 Manifest 有 1 小时内存缓存新 tag 更新后需要等缓存过期才会同步属于正常现象不用急着报障。突然报 404缓存的内容只保留 30 天过期后会触发重新同步个别场景下 Blob 缓存到期被删除会短暂报 404重试一次通常就能恢复。不想让所有环境都走公网参考上文的内网缓存方案把中转站搬进公司网络既快又稳也便于统一管理。最后花 10 分钟把慢的问题交给工具镜像拉取慢是每个国内开发者都绕不开的坎但解决它并不需要复杂的网络知识。public-image-mirror 把最难的跨境同步问题封装在了后端你只需要记住一条规则原始镜像地址前面加上m.daocloud.io/。现在就可以动手先跑通前面那条 nginx 命令再根据你的使用场景Docker、Kubernetes 或内网缓存选择对应的配置路径。遇到问题去项目仓库提 Issue 反馈如果你想参与贡献git clone https://gitcode.com/GitHub_Trending/pu/public-image-mirror之后提交 Pull Request 完善支持列表也是很好的方式。镜像加速这件事10 分钟上手长期受益。你的下一次docker pull不应该再卡在 0% 了。【免费下载链接】public-image-mirror很多镜像都在国外。比如 gcr 。国内下载很慢需要加速。致力于提供连接全世界的稳定可靠安全的容器镜像服务。项目地址: https://gitcode.com/GitHub_Trending/pu/public-image-mirror创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考