起源版:https://github.com/topcss/docker-pull-tar/releases/tag/v1.0.7
本来懒得搞,结果出现一点小问题,只好自己搞了。
- 多架构镜像下载(支持amd64/arm等)
- 断点续传与自动重试机制
- 完整性校验(SHA256哈希验证)
- 两种打包格式支持:
- 标准Docker格式
- 群晖NAS专用格式
- 代理服务器支持
- 多线程下载控制
- 离线环境部署Docker镜像
- 企业内网镜像仓库同步
- 容器镜像归档备份
- 跨架构镜像转换
环境 | 要求 |
---|---|
操作系统 | Windows/macOS/Linux |
Python版本 | ≥3.8 |
内存 | ≥512MB |
磁盘空间 | 镜像大小×2 |
# 下载最新版Ubuntu镜像
python main.py ubuntu -o ./my_images
# 下载指定版本的Nginx镜像
python main.py nginx:1.21 -o ./web_server
下载完成后在./my_images
目录中会生成:
[镜像名].tar
:打包好的镜像文件docker_pull.log
:操作日志文件
参数 | 说明 | 示例 |
---|---|---|
-a | 指定CPU架构 | -a arm64 |
-r | 自定义镜像仓库地址 | -r my.registry.com |
--insecure | 跳过SSL证书验证 | --insecure |
-j | 多线程下载数(提升速度) | -j 3 |
python main.py [镜像名称] [选项]
必选参数:
image 镜像名称格式:
[仓库/]镜像名[:标签]
示例:library/ubuntu:22.04
选项:
-a ARCH, --arch ARCH
目标架构(默认:amd64)
※ 支持:amd64, arm64, arm/v7等
-r REGISTRY, --registry REGISTRY
镜像仓库地址(默认:registry-1.docker.io)
-o OUTPUT, --output OUTPUT
输出目录(默认:./output)
-j WORKERS, --workers WORKERS
并发下载线程数(默认:1)
※ 建议值:2-5(根据网络带宽调整)
-f FORMAT, --format FORMAT
打包格式选择:
docker - 标准Docker格式
synology - 群晖专用格式(默认)
--insecure 禁用SSL证书验证(仅测试环境使用)
--debug 启用调试日志模式
- 镜像解析:解析输入镜像名称
- 认证获取:获取Docker Registry访问令牌
- 清单下载:获取镜像架构清单
- 分层下载:并行下载镜像层文件
- 完整性校验:逐层验证SHA256哈希
- 镜像打包:按指定格式生成最终镜像包
graph TD
A[命令行解析] --> B[认证管理]
B --> C[清单获取]
C --> D[分层下载器]
D --> E[完整性验证]
E --> F[镜像打包]
-
自适应认证:自动处理令牌过期和刷新
-
分块校验:每512KB数据块实时校验
-
智能重试:三级重试策略:
- 瞬时错误(HTTP 5xx):指数退避重试
- 网络中断:断点续传
- 认证失效:令牌自动刷新
-
安全机制:
- 临时文件隔离存储
- 下载失败自动清理残留
- 内存安全的数据流处理
现象 | 解决方案 |
---|---|
下载速度慢 | ① 使用-j 增加线程数② 检查网络代理设置 |
提示"SSL证书验证失败" | 添加--insecure 参数 |
报错"未找到架构" | ① 确认镜像支持该架构 ② 使用 -a 指定正确架构 |
文件校验失败 | ① 重试下载 ② 检查存储空间是否充足 |
提示"认证失败" | ① 检查镜像名称拼写 ② 确认仓库访问权限 |
日志文件位置:[输出目录]/docker_pull.log
关键日志标记:
[DEBUG]
:调试信息(需启用--debug参数)[WARNING]
:非致命性警告[ERROR]
:需要立即处理的错误
典型错误处理:
ERROR 401 Unauthorized
→ 解决方案:检查镜像名称格式是否正确,确认是否有访问权限
ERROR 证书验证失败
→ 添加--insecure参数或配置SSL证书:
export REQUESTS_CA_BUNDLE=/path/to/cert.pem
ERROR 磁盘空间不足
→ 清理存储空间或指定更大容量的输出目录
# 临时设置代理
export HTTP_PROXY="http://proxy.example.com:8080"
export HTTPS_PROXY="http://proxy.example.com:8080"
# 使用代理下载
python main.py ubuntu --output ./proxy_download
通过修改源代码全局变量(需Python知识):
# 文件: main.py
CHUNK_SIZE = 1024 * 512 # 下载分块大小
MAX_RETRIES = 5 # 最大重试次数
RETRY_DELAY = 10 # 重试间隔(秒)
- 镜像缓存服务器:配置本地Registry仓库
- 安全加固:
- 删除
--insecure
参数 - 设置可信证书目录
- 删除
- 自动化集成:
# 示例:Jenkins流水线集成 python main.py ${IMAGE_NAME} \ -a ${TARGET_ARCH} \ -o ${WORKSPACE}/build \ -f docker
版本 | 更新内容 |
---|---|
v16.0.0 | 初始发布版本 |
联系开发者:杜玛
邮箱:无
问题反馈模板:
[操作系统版本]:
[Python版本]:
[复现步骤]:
[相关日志片段]:
[网络环境]:
本工具遵循MIT开源协议,使用Docker API时请遵守Docker服务条款。
注意事项:
- 生产环境使用前请进行充分测试
- 敏感镜像下载请遵守相关法律法规
- 定期检查更新以获取安全补丁
[文档版本:2025-03-11] [生成工具:docker_pull v16.0.0]