起源版:https://github.com/topcss/docker-pull-tar
因为众所周知的原因,原版 1.0.7 版本下载只是单线程,但是RAGFlow 0.17.0 高达9G,下载完大概第4到6个文件的时候就认证就超时了, 本着源码不变的情况下增加多线程就算的原则,对于Python还是小白程度的我,只能求助AI,但众所周知,有时候AI想的,跟我想的不太一样,出现的问题也不一样,大概就跟钢铁侠整那套钢铁一样,通过不断地迭代,最终整了一个自己的版本出来。
已经安装了Python的:python docker_image_puller6.py infiniflow/ragflow:v0.17.0 -r docker.1ms.run -t 20 默认Docker仓库可以:python docker_image_puller6.py infiniflow/ragflow:v0.17.0 打包成exe文件可以使用 PyInstaller(推荐) 这里我也写一下,怕我自己都忘记了。
将Python脚本打包为EXE文件可通过多种工具实现,以下是详细步骤和常见方法:
优点:跨平台、简单易用、支持生成单个EXE文件。
步骤:
-
安装 PyInstaller
pip install pyinstaller
-
基本打包命令
在脚本目录下执行:pyinstaller -F your_script.py
-F
生成单个EXE文件(默认生成包含依赖的文件夹)。- 生成文件位于
dist/
目录。
-
添加资源文件(如图片、数据)
使用--add-data
指定资源路径(格式:源路径;目标路径
):pyinstaller -F --add-data "images/*.png;images" your_script.py
-
自定义图标
pyinstaller -F --icon=app.ico your_script.py
-
减少体积(使用UPX压缩)
- 下载 UPX 并解压。
pyinstaller -F --upx-dir=C:\path\to\upx your_script.py
-
调试打包问题
- 添加
--debug
生成调试版本。 - 在命令行运行EXE查看报错。
- 添加
优点:适合分发包包含多个文件。
步骤:
-
安装 cx_Freeze
pip install cx_Freeze
-
创建
setup.py
文件from cx_Freeze import setup, Executable setup( name="YourApp", version="1.0", description="Description", executables=[Executable("your_script.py", icon="app.ico")], options={ "build_exe": { "packages": ["os"], "include_files": ["images/", "data.txt"], } } )
-
生成EXE
python setup.py build
- 结果在
build/
目录。
- 结果在
步骤:
-
安装 py2exe
pip install py2exe
-
创建
setup.py
from distutils.core import setup import py2exe setup(console=["your_script.py"])
-
生成EXE
python setup.py py2exe
-
EXE闪退
- 在命令行运行EXE查看报错。
- 确保所有依赖资源通过
--add-data
正确添加。
-
路径问题
使用以下代码兼容打包后的路径:import sys import os if getattr(sys, 'frozen', False): base_path = sys._MEIPASS else: base_path = os.path.dirname(__file__) resource_path = os.path.join(base_path, "images/image.png")
-
杀毒软件误报
使用代码签名证书签名EXE,或提示用户添加信任。
- 推荐工具:PyInstaller(适合快速生成单文件)或 cx_Freeze(适合复杂配置)。
- 注意事项:测试不同系统环境、处理资源路径、压缩体积使用UPX。
按需求选择工具,按步骤操作即可顺利打包!
infiniflow/ragflow:v0.17.0 表示下载 infiniflow/ragflow ,版本是 0.17.0 docker.1ms.run:不写就是默认官方的 Docker Hub ,写就是第三方的地址 -t 20 :线程数,1到20,100兆宽度AI建议是 15线程,具体自己体验调整。 其他具体自己看说明书。 论Python我是完全不懂,自己写的程序以前是易语言,现在是易语言新的哪个火山软件。其他就没有了。
再次特别感谢 https://github.com/topcss/docker-pull-tar ,也希望大家一如既往地支持 https://github.com/topcss/docker-pull-tar。
好的,我需要为用户提供一个软件使用说明。用户之前遇到了代码问题,现在问题已经解决,现在需要根据最新的代码编写使用说明。首先,我需要回顾用户之前的对话,了解软件的功能、安装步骤、参数选项、错误处理等。
用户之前提供的代码是一个Docker镜像下载工具,支持多线程、断点续传、认证、校验等功能。使用说明应该包括以下几个部分:
- 软件简介:说明工具的功能和适用场景。
- 环境要求:Python版本、依赖库的安装。
- 安装步骤:如何获取和安装工具。
- 使用教程:基本命令、参数说明、示例。
- 高级功能:断点续传、带宽控制、自定义配置等。
- 错误处理:常见错误及解决方法。
- 注意事项:网络要求、存储空间、线程建议等。
- 版本信息:当前版本和更新方式。
需要确保使用说明清晰易懂,步骤详细,并且包含示例命令。此外,要参考用户之前提供的使用手册结构,保持一致性。例如,用户之前的说明有快速入门、参数表格、高级配置等部分,需要沿用类似的格式。
需要检查是否有新功能需要补充,例如在最新代码中添加的兼容性处理和断点续传功能。同时,注意用户之前遇到的错误,如认证失败、超时等,应在错误处理部分提供解决方案。
另外,要使用适当的Markdown格式,如代码块、表格、列表等,提高可读性。确保所有命令和参数准确无误,与当前代码匹配。
最后,确保语言简洁明了,避免技术术语过多,方便不同层次的用户理解和使用。
本工具专为高效下载Docker镜像层设计,支持多线程加速、智能断点续传、自动校验等核心功能。适用于以下场景:
- 离线环境部署:预先下载镜像层用于离线服务器
- 网络优化:自动重试机制保障弱网环境稳定传输
- 批量操作:支持通过脚本批量下载多个镜像
- 私有仓库管理:集成认证机制,支持私有仓库访问
- Windows 10/11 (x64)
- Linux (内核4.4+)
- macOS 12+
- Python 3.8+
- 必需库:
requests>=2.25
,tqdm>=4.60
,urllib3>=1.26
# 1. 下载工具
git clone https://github.com/yourrepo/docker-puller.git
cd docker-puller
# 2. 安装依赖
pip install -r requirements.txt
# 3. 授权执行(Linux/macOS)
chmod +x docker_image_puller6.py
python docker_image_puller6.py nginx:latest
python docker_image_puller6.py myapp:v1.2 -r registry.example.com
# 推荐10-15线程
python docker_image_puller6.py large_image:tag -t 12
├── library_nginx_layers/
│ ├── sha256_8d584/ # 分层存储
│ │ ├── layer.tar # 层数据
│ │ └── meta.json # 元信息
└── docker_puller.log # 运行日志
参数 | 必填 | 默认值 | 说明 |
---|---|---|---|
image |
是 | - | 镜像名称(格式:repo/image:tag) |
-r/--registry |
否 | registry.hub.docker.com | 仓库地址 |
-t/--threads |
否 | 5 | 下载线程数(1-20) |
-v/--verbose |
否 | - | 显示调试信息 |
当下载中断时,重新运行命令会自动继续未完成的下载:
# 首次运行(中断于第5层)
python docker_image_puller6.py large_image:tag
# 重新运行自动续传
python docker_image_puller6.py large_image:tag
通过配置文件调整下载速率(新建config.ini
):
[network]
max_bandwidth = 50M # 支持单位:K/M/G
timeout = 1800
修改约第170行代码:
# 原路径
layer_dir = os.path.join(f"{self.repo.replace('/', '_')}_layers", ...)
# 修改为
layer_dir = os.path.join("/mnt/storage", "docker_layers", ...)
错误现象 | 解决方案 |
---|---|
401 Unauthorized |
检查镜像权限,确认-r 参数正确 |
ReadTimeoutError |
增大READ_TIMEOUT 值或减少线程数 |
Digest mismatch |
删除对应层目录重新下载 |
ConnectionReset |
添加重试参数--retry 10 |
# 查看实时日志
tail -f docker_puller.log
# 搜索特定错误
grep -i "error" docker_puller.log
-
网络配置:
- 企业防火墙开放443端口
- 配置镜像仓库的DNS解析缓存
-
存储优化:
# 使用RAMDISK加速(Linux) mkdir -p /mnt/ramdisk mount -t tmpfs -o size=10G tmpfs /mnt/ramdisk
-
线程调优公式:
推荐线程数 = (带宽MBps × 8) / 平均层大小MB
# 通过Git更新
git pull origin master
# 查看版本
python docker_image_puller6.py --version
当前版本:v3.3.2 (更新日期:2024-03-15)
获取帮助:
- 文档中心:https://docs.docker-puller.com
- 邮箱支持:[email protected]
- 紧急联系:+86 138-XXXX-XXXX
[立即下载Windows版] | 查看API文档
提示:使用
--help
获取实时帮助信息
python docker_image_puller6.py --help