国内拉 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 pull + docker tag + docker push 太繁琐 | 改个文件自动触发,全程无人值守 |
| 大镜像(最大支持 40GB)传输易断 | 借助 GitHub 官方 Runner,稳定拉满带宽 |
| 多架构镜像难搞 | 支持 –platform 指定架构 |
核心原理:GitHub Action 在国外 Runner 上拉取镜像,再推送到你的阿里云 ACR 私有仓库。你只需要把想要的镜像写进一个清单文件,剩下的交给 CI。
二、前置准备
只需要两样东西:
不需要自己准备服务器,不需要本地装 Docker。
三、配置阿里云(拿 4 个关键信息)
- 用户名 → 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 个值分别建为 Secret:
| 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
# 指定架构(多架构场景)
–platform=linux/amd64 nginx:latest
# 指定源仓库(默认是 Docker Hub)
k8s.gcr.io/kube-state-metrics/kube-state-metrics
ghcr.io/owner/repo:tag
规则说明:
- 可加 tag,也可不加(不加默认 latest)
- 可用 –platform=xxxxx 指定架构
- 可用 源仓库/镜像名 格式指定非 Docker Hub 的源,如 k8s.gcr.io/…、ghcr.io/…
- # 开头是注释
把文件提交(Commit)后,GitHub Action 自动触发构建,开始拉取并转存。
六、在国内服务器使用
回到阿里云控制台「镜像仓库」,能看到刚转存好的镜像。可以把它设为公开,这样拉取免登录。
在国内服务器直接 pull:
docker pull registry.cn-hangzhou.aliyuncs.com/<你的命名空间>/alpine
对应关系:
- registry.cn-hangzhou.aliyuncs.com → 你的 ALIYUN_REGISTRY
- <你的命名空间> → 你的 ALIYUN_NAME_SPACE
- alpine → 镜像名
想省事就把仓库设成公开;若要保持私有,国内服务器需先 docker login 一次。
七、进阶玩法
1. 多架构镜像
在 images.txt 里用 –platform=linux/amd64 或 –platform=linux/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 即可,不影响已成功转存的镜像。
敏感信息保护 虽然 Secret 不会明文暴露,但转存到公开的阿里云仓库等于把镜像"公开托管"。不要拿它转存任何含私密代码的镜像。
九、总结
这套方案把"国外镜像拉不动"的痛点彻底解决,且完全免费、基本零维护:
- 配置一次,日后只改 images.txt 一行就能加新镜像
- 国内线路拉取,速度和稳定性都比直连 Docker Hub 好太多
- 支持多架构、多源仓库、定时同步
如果你也被 Docker Hub 的拉取速度折磨过,强烈建议花 10 分钟把这个工具配起来。觉得本文有帮助的话,别忘了 点赞 👍 + 收藏 ⭐,你的支持是我持续输出的动力!
网硕互联帮助中心





评论前必须登录!
注册