资讯动态

国内拉 Docker 镜像总超时?用 GitHub Action 一键转存到阿里云(开源神器实测)

发布时间:2026/9/4 16:35:08 来源:尧图企业网站定制
国内拉 Docker 镜像总超时用 GitHub Action 一键转存到阿里云开源神器实测你是不是也经常遇到这种情况服务器上docker pull mysql、docker pull nginx卡半天最后超时失败或者访问 Docker Hub 不稳定。尤其是国内云服务器拉取国外镜像的体验一言难尽。本文介绍一个开源工具docker_image_pusher用 GitHub Action 把 Docker Hub、gcr.io、k8s.io、ghcr.io 等国外镜像自动转存到你的阿里云容器镜像仓库国内服务器直接docker pull阿里云地址速度快还免费。目前项目已收获 2.9k Star、1.6w Fork是同类方案里最省心的一个。本文基于开源项目 tech-shrimp/docker_image_pusher 整理原作者为技术爬爬虾转载请注明出处。一、它能解决什么问题痛点本方案国内直连 Docker Hub 慢、超时、不稳定转存后从阿里云拉走国内线路手动docker pulldocker tagdocker push太繁琐改个文件自动触发全程无人值守大镜像最大支持 40GB传输易断借助 GitHub 官方 Runner稳定拉满带宽多架构镜像难搞支持--platform指定架构核心原理GitHub Action 在国外 Runner 上拉取镜像再推送到你的阿里云 ACR 私有仓库。你只需要把想要的镜像写进一个清单文件剩下的交给 CI。二、前置准备只需要两样东西一个阿里云账号有容器镜像服务 ACR个人版免费一个 GitHub 账号用来跑 Action同样免费不需要自己准备服务器不需要本地装 Docker。三、配置阿里云拿 4 个关键信息登录 阿里云容器镜像服务控制台启用个人实例创建一个命名空间Namespace记下这个名称后面叫它ALIYUN_NAME_SPACE进入「访问凭证」→「获取环境变量」记下三个值用户名→ALIYUN_REGISTRY_USER密码→ALIYUN_REGISTRY_PASSWORD仓库地址→ALIYUN_REGISTRY形如registry.cn-hangzhou.aliyuncs.com小提示仓库地址里的地域如cn-hangzhou选离你服务器近的拉取更快。四、Fork 项目并配置4.1 Fork 本项目打开 docker_image_pusher点击右上角Fork把项目复制到你的 GitHub 账号下。4.2 启用 GitHub Action进入你 Fork 后的项目点击顶部Actions标签按提示启用 Workflow。4.3 配置 4 个 Secrets进入Settings → Secrets and variables → Actions → New repository secret把上面拿到的 4 个值分别建为 SecretSecret 名称值ALIYUN_NAME_SPACE你的命名空间名ALIYUN_REGISTRY_USER阿里云用户名ALIYUN_REGISTRY_PASSWORD阿里云密码ALIYUN_REGISTRY仓库地址如registry.cn-hangzhou.aliyuncs.com这四个值是整个方案的钥匙只存在 GitHub Secret 里不会出现在代码里相对安全。五、添加你想转存的镜像打开项目里的images.txt文件每行写一个镜像# 这是注释# 开头不会处理 nginx mysql:8.0 redis:7 # 指定架构多架构场景 --platformlinux/amd64 nginx:latest # 指定源仓库默认是 Docker Hub k8s.gcr.io/kube-state-metrics/kube-state-metrics ghcr.io/owner/repo:tag规则说明可加 tag也可不加不加默认latest可用--platformxxxxx指定架构可用源仓库/镜像名格式指定非 Docker Hub 的源如k8s.gcr.io/...、ghcr.io/...#开头是注释把文件提交Commit后GitHub Action 自动触发构建开始拉取并转存。六、在国内服务器使用回到阿里云控制台「镜像仓库」能看到刚转存好的镜像。可以把它设为公开这样拉取免登录。在国内服务器直接 pulldockerpull registry.cn-hangzhou.aliyuncs.com/你的命名空间/alpine对应关系registry.cn-hangzhou.aliyuncs.com→ 你的ALIYUN_REGISTRY你的命名空间→ 你的ALIYUN_NAME_SPACEalpine→ 镜像名想省事就把仓库设成公开若要保持私有国内服务器需先docker login一次。七、进阶玩法1. 多架构镜像在images.txt里用--platformlinux/amd64或--platformlinux/arm64指定指定后的架构会作为前缀加在镜像名前互不冲突。2. 镜像重名自动处理如果不同源有同名镜像如xhofe/alist和xiaoyaliu/alist程序会自动把命名空间作为前缀加在镜像名前避免覆盖。3. 定时自动同步修改项目里的.github/workflows/docker.yaml加一段schedule即可定时执行注意 cron 用的是UTC 时区on:schedule:-cron:0 18 * * *# 每天 UTC 18:00北京时间次日 02:00执行workflow_dispatch:# 保留手动触发八、常见坑与注意事项阿里云有免费额度但超量会收费个人版 ACR 有存储和流量免费额度超出部分按量计费。长期不用的大镜像建议定期清理或把仓库设为只读后下载到本地归档。密码不是登录密码ALIYUN_REGISTRY_PASSWORD是容器镜像服务「访问凭证」里单独生成的密码不是阿里云账号登录密码。Action 偶尔失败GitHub 免费 Runner 偶尔排队或网络抖动导致失败直接到 Actions 页面手动 Re-run即可不影响已成功转存的镜像。## 九、总结这套方案把国外镜像拉不动的痛点彻底解决且完全免费、基本零维护配置一次日后只改images.txt一行就能加新镜像国内线路拉取速度和稳定性都比直连 Docker Hub 好太多支持多架构、多源仓库、定时同步如果你也被 Docker Hub 的拉取速度折磨过强烈建议花 10 分钟把这个工具配起来。觉得本文有帮助的话别忘了点赞 收藏 ⭐你的支持是我持续输出的动力

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价