利用python脚本从dockerhub上下载镜像,可以选择arm架构还是x86架构
python脚本使用方法
python install.py gpustack/gpustack:v0.7.1-npu arm64
支持平台选择 arm64或者amd64
支持断点续传
从官方docker hub下载,需要梯子
更新日志:
2025.8.27 增加了下载速度显示,增加了需要下载的总大小和每层大小
2025.8.27 17:36 增加了每层的检测,如果层级下载的大小等有问题,会重新下载
2025.9.6 优化了下载速度的显示问题
2025.9.6 增加了临时文件保留
install.py文件内容
import os
import sys
import gzip
import json
import hashlib
import shutil
import requests
import tarfile
import urllib3
import time
urllib3.disable_warnings()
if len(sys.argv) < 2:
print('Usage:\n\tdocker_pull.py [registry/][repository/]image[:tag|@digest] [arch]\n')
print('\tarch default: amd64, other options: arm64, arm/v7')
exit(1)
image_input = sys.argv[1]
target_arch = sys.argv[2] if len(sys.argv) > 2 else "amd64"
target_os = "linux"
repo = 'library'
tag = 'latest'
imgparts = image_input.split('/')
try:
img, tag = imgparts[-1].split('@')
except ValueError:
try:
img, tag = imgparts[-1].split(':')
except ValueError:
img = imgparts[-1]
if len(imgparts) > 1 and ('.' in imgparts[0] or ':' in imgparts[0]):
registry = imgparts[0]
repo = '/'.join(imgparts[1:-1])
else:
registry = 'registry-1.docker.io'
if len(imgparts[:-1]) != 0:
repo = '/'.join(imgparts[:-1])
else:
repo = 'library'
repository = f'{
repo}/{
img}'
# Authentication
auth_url = 'https://auth.docker.io/token'
reg_service = 'registry.docker.io'
resp = requests.get(f'https://{
registry}/v2/', verify=False)
if resp.status_code == 401:
auth_header = resp.headers['WWW-Authenticate']
auth_url = auth_header.split('"')[1]
try:
reg_service = auth_header.split('"')[3]
except IndexError:
reg_service = ""
def get_auth_head(mtype):
resp = requests.get(f'{
auth_url}?service={
reg_service}&scope=repository:{
repository}:pull', verify=False)
token = resp.json()['token']
return {
'Authorization': f'Bearer {
token}', 'Accept': mtype}
def format_size(bytes_size):
for unit in ['B', 'KB', 'MB', 'GB']:
if bytes_size < 1024.0:
return f"{
bytes_size:.2f}{
unit}

最低0.47元/天 解锁文章
490

被折叠的 条评论
为什么被折叠?



