国内无法访问海外 Docker 镜像进阶优化方案
见字如面,与大家分享实践中的经验与思考。
之前写过一篇文章:国内无法拉取 Docker 镜像解决方案,通过 Github Actions 将镜像 mirror 到阿里云私有仓库中。
虽然解决了问题,但是每次需要修改 github 仓库中的 images.txt,然后再触发 Github Actions,不支持本地或者服务器执行。
工具介绍
这个工具用于将 Docker 镜像从公共仓库拉取并推送到阿里云容器镜像服务。支持本地运行和 GitHub Actions 集成。
主要功能:
支持从公共仓库拉取 Docker 镜像并推送到阿里云容器镜像服务
支持处理重名镜像,自动添加命名空间前缀
支持指定平台架构的镜像
支持本地运行和 GitHub Actions 集成
提供 Bash 脚本和 Python 两种实现方式
💡注意:
克隆代码可以直接执行,需要本地或者服务器支持魔法访问网络!没有的话,还是使用 Github Actions 执行吧。
工具使用

01 云配置
阿里云镜像库和 Github Actions 密钥配置。具体参考代码仓库的 README.md 文档。
这步主要是为了获取到如下配置参数:
ALIYUN_REGISTRY: 阿里云容器镜像服务地址ALIYUN_NAME_SPACE: 阿里云容器镜像命名空间ALIYUN_REGISTRY_USER: 阿里云容器镜像服务用户名ALIYUN_REGISTRY_PASSWORD: 阿里云容器镜像服务密码
02 本地配置
复制
.env.example文件为.env:
cp .env.example .env编辑
.env文件,填入您的实际配置:
ALIYUN_REGISTRY=registry.cn-hangzhou.aliyuncs.com
ALIYUN_NAME_SPACE=your-namespace
ALIYUN_REGISTRY_USER=your-username
ALIYUN_REGISTRY_PASSWORD=your-password将上述获取到的四个配置,配置到.env文件即可。
03 配置镜像列表
在 images.txt 文件中列出需要镜像的 Docker 镜像,每行一个。支持以下格式:
# 基本格式
nginx
mysql:8.0.37
# 带命名空间的镜像
halohub/halo:2.20
# 私有仓库镜像
k8s.gcr.io/kube-state-metrics/kube-state-metrics:v2.0.0
# 指定架构的镜像
--platform=linux/arm64 xiaoyaliu/alist如果你要Github Actions运行的话,需要 fork 该项目,修改 images.txt 文件,替换成你想要 mirror 的 docker 镜像。
04 Bash 脚本执行
拉取源码,进入到项目目录中。
# 确保脚本有执行权限
chmod +x docker-mirror.sh
# 运行脚本
./docker-mirror.sh
根据images.txt中镜像列表逐个执行,等待执行完毕即可。
05 Python 脚本执行
# 安装依赖,根据本地实际情况使用 pip 或者 pip3
pip3 install -r requirements.txt
# 运行脚本,根据本地实际情况使用 python 或者 python3
python3 docker_mirror.py
06 Github Actions 执行
该工具已经集成到 GitHub Actions 工作流中。当推送到 main 分支或手动触发工作流时,将自动运行镜像任务。

07 查看Mirror结果

推荐阅读
欢迎关注我的公Z号“Eric技术圈”,原创技术文章第一时间推送。