Docker pull拉取ProGet镜像时报expected HTTP 206 from byte range request错误
本地ProGet拉取Docker镜像206报错解决方案
定位故障镜像层
- 从你提供的pull执行日志可直接定位故障层:最后处于重试状态、未标记
Download complete的层哈希前缀为9c36e7f174ec,就是触发报错的镜像层。Docker拉取过程中会逐个输出层的处理状态,报错前最后一个未完成下载的层即为故障层。 - 如需获取该层的完整哈希值,可开启Docker debug模式:修改Docker daemon配置,添加
"debug": true参数,重启Docker服务后重新执行拉取命令,debug日志会输出该层的完整SHA256值、对应的ProGet拉取请求地址。 - 也可登录ProGet后台,进入对应Docker feed的存储管理页面,搜索哈希前缀
9c36e7f174ec,即可查看该层的完整存储信息、文件大小和完整性状态。
报错根因
该报错是ProGet 5.3.x版本的常见问题,触发原因通常为两种:
- 对应镜像层的存储文件损坏:服务器磁盘坏块、文件被意外篡改都会导致ProGet无法正确响应Docker的分片拉取(range)请求,无法返回要求的206状态码。
- 服务版本bug:你使用的ProGet 5.3.18存在大镜像层range请求处理逻辑缺陷,大体积层分片拉取时容易出现响应状态码异常。
修复方案
- 替换损坏层:从公共镜像源拉取对应版本的镜像,导出哈希为
9c36e7f174ec的层文件,上传到ProGet对应feed的存储路径覆盖损坏文件即可。也可以直接删除ProGet中该损坏层的存储文件,重新上传/同步对应镜像,ProGet会自动补全缺失的层文件。 - 临时规避拉取:拉取时添加
--disable-content-trust参数,关闭分片拉取校验,部分场景下可绕过range请求限制,命令为:docker pull --disable-content-trust proget/docker/myimage - 永久修复:登录ProGet管理后台,执行对应Docker feed的
存储校验定时任务,自动扫描修复所有损坏的层文件。可将ProGet升级到5.3.22及以上的稳定版本,该版本已修复大镜像层range请求的响应异常问题。
内容的提问来源于stack exchange,提问作者Don Chambers
相关产品推荐
相关产品推荐

