无需本地 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:latest2. 拉取指定架构的镜像
例如拉取 ARM64 镜像:
python docker_pull.py quay.io/ascend/vllm-ascend:DeepSeekV4-flash-0731 --os linux --architecture arm643. 拉取指定 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