不依赖本地 Docker 环境:从 Docker Hub 下载镜像并保存为 tar 文件
使用说明
无需安装 Docker,直接从 Registry 拉取镜像并打包为 .tar 文件。支持 Docker Hub、quay.io 等公共或私有 Registry,并自动处理 manifest list / OCI index,支持选择多架构镜像。
下载支持断点续传和自动重试:中断后再次运行会跳过已完成的层,从断点继续未完成的层;遇到网络波动时会自动重试,最多 5 次并使用指数退避。
命令格式
python docker_pull_v2.py [选项] <镜像名称>
| 选项 | 说明 | 默认值 |
|---|---|---|
-h, --help |
显示帮助信息并退出 | — |
--os OS |
指定目标操作系统平台 | linux |
--architecture ARCH |
指定目标 CPU 架构 | amd64 |
--digest DIGEST |
指定具体的 manifest digest,格式为 sha256:xxx;指定后跳过平台匹配,直接使用该 digest |
— |
Warning
原文命令格式使用 docker_pull_v2.py,示例使用 docker_pull.py。实际执行时应以下载脚本的文件名为准。
使用示例
1. 拉取 Docker Hub 最新 Ubuntu 镜像
默认目标平台为 linux/amd64:
python docker_pull.py ubuntu:latest
2. 拉取指定架构的镜像
例如拉取 ARM64 镜像:
python docker_pull.py quay.io/ascend/vllm-ascend:DeepSeekV4-flash-0731 --os linux --architecture arm64
3. 拉取指定 digest 的镜像
python docker_pull.py quay.io/ascend/vllm-ascend:DeepSeekV4-flash-0731 --digest sha256:abc123...
4. 查看帮助
python docker_pull.py -h
脚本会在当前目录生成一个 .tar 文件,可在安装 Docker 的目标主机上导入:
docker load -i <生成的.tar文件>
断点续传
- 每层下载时会生成
layer_gzip.tar临时文件。 - 如果下载中断,再次运行脚本会自动检测并继续下载。
- 已解压完成的
layer.tar会被自动跳过,不会重复下载。 - 如果 Registry 不支持 Range 请求,则会从头重新下载该层。
自动重试
- 网络超时、连接重置、HTTP 5xx 等错误会触发重试。
- 最多重试 5 次,每次间隔呈指数增长,例如
2s、4s、8s。 - 断点续传与重试结合时,每次重试都会从已下载的部分继续。
- 如果所有重试都失败,脚本会报错退出。
注意事项
- 需要 Python 3 和
requests库:
pip install requests
- 对于需要认证的私有仓库,应确保网络可达且凭证正确。
- 如果目标镜像不存在指定平台,脚本会列出可用平台并默认选择第一个。
脚本项目地址:docker_image_downloader