
鏡像卡在 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也就是鏡像站的鏡像站。所有 hashsha256都和源保持一致采用懶加載機制你拉的時候它才從源同步絕不給你造一個變味的鏡像。項目每天檢查各倉庫的同步情況保證熱門鏡像基本實時可用。換句話說你不需要信任什么第三方改編版你拿到的還是那個官方鏡像只是運輸路徑變了。這一點對生產環境尤其重要——hash 對得上安全底線就在。選它而不是自建代理的三個理由我知道你可能已經在想那我干脆自己搭個代理不行嗎 行但先看完這張對比再決定維度自建代理公共代理源public-image-mirror上手成本要維護服務器和證書配置即用配置即用改動量要改一堆倉庫地址加前綴即可加前綴即可穩定性取決于你的帶寬看運營商心情每天檢查同步白名單透明鏡像一致性自己保證不透明sha256 與源一致懶加載三個理由一個比一個實在改動最小只是名稱映射不需要改任何代碼。你的 Dockerfile、Helm、yaml 全部原樣只在地址前加前綴。穩定可靠每天自動檢查同步情況還有同步隊列queue.m.daocloud.io/status/和服務狀態監控頁面可以隨時查。覆蓋面廣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.iodocker.iodocker.m.daocloud.iodhi.iodhi.m.daocloud.iogcr.iogcr.m.daocloud.ioghcr.ioghcr.m.daocloud.iok8s.gcr.iok8s-gcr.m.daocloud.io已遷移到 registry.k8s.ioregistry.k8s.iok8s.m.daocloud.iomcr.microsoft.commcr.m.daocloud.ionvcr.ionvcr.m.daocloud.ioquay.ioquay.m.daocloud.ioregistry.ollama.aiollama.m.daocloud.io實驗內測中用起來長這樣docker.io/library/busybox ↓ 前綴替換 docker.m.daocloud.io/library/busybox一句話說清適用場景圖省事、想要短地址就用替換法圖保險、不想記規則就用前綴法官方也是更推薦前綴法的。這里有個特別提醒每個源站的內容都不一樣??不要把 docker.io 之外的站點配到 Docker 的 registry-mirrors 里那是給 docker.io 專用鏡像加速的配錯了輕則無效、重則報錯。避開這 6 個坑拉取成功率直接拉滿這些坑我基本都踩過直接給你避坑清單一條一條對挑時間拉白天高峰很擠把拉取任務放在凌晨北京時間 01–07 點會快很多實測差距明顯。?用sha256:鎖死鏡像優先用 digest 固定版本其次用明確的 tag如v1.22.1最后才考慮latest。latest這種可變 tag 更新后舊數據會被響應且后臺要重新同步。緩存只有 30 天項目緩存的內容只保留 30 天過期后會重新同步冷門鏡像第一次拉偏慢是正常現象。tag 更新有延遲Manifest 內存緩存 1 小時也就是說上游 tag 更新后大約 1 小時才會同步新的別剛發布就去拉然后懷疑人生。偶發 404 別慌Blob 內存緩存只有 1 分鐘期間如果 blob 剛好到 30 天期限被刪了可能報 404重試一般就好。先確認鏡像在白名單里項目用allows.txt維護支持列表動手之前先看一眼你的鏡像在不在里面省得白等。進階Kubernetes 全家桶一次提速到位如果你的痛點是 Kubernetes 拉鏡像慢下面這套組合拳按需取用都是可直接抄的配置。kubeadm 安裝控制面——改兩行imageRepository即可apiVersion: kubeadm.k8s.io/v1beta3 kind: ClusterConfiguration 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.1containerd——參考官方 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.ioPodman 有個 Docker 給不了的優勢它支持給docker.io 之外的 registry 配 mirrorgcr、ghcr、quay、registry.k8s.io 都能配配置方式照葫蘆畫瓢。企業級玩法把加速站搬進內網團隊人多、鏡像量大公共站扛不住那就部署一個本地緩存代理讓內網所有機器共享緩存。原理很簡單用一個帶 proxy 模式的 registry把m.daocloud.io當上游。先寫一個docker-compose.ymlservices: 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 --gpusall -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.sh、fmt-image-match.sh、verify-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),僅供參考