You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nexus3 docker镜像推送成功后blobs缺失导致离线环境无法拉取问题

问题产生原因
  • 核心原因:Windows系统基础镜像(包含nanoserver、servercore等)的基础层属于不可分发层(nondistributable/foreign layer),Docker客户端默认不会将这类层推送到私有仓库,仅会在manifest中写入层的哈希和官方源地址引用。你在Nexus中看到的manifest是推送成功了,但真实的层文件根本没有上传到Nexus的blob存储中,无外网环境下Nexus无法从微软官方源拉取对应层,就会导致拉取镜像超时。
  • 其他可能原因:
    • 推送过程中网络中断,部分层上传失败,但manifest已提交成功,Nexus仅生成了镜像元数据没有存储对应层
    • Nexus的blob存储目录权限不足,层文件写入磁盘失败
    • 误将仓库创建为proxy类型,且未启用本地存储foreign层的配置,层被缓存清理机制删除
排查步骤
  • 确认层属性:在推送镜像的Windows设备执行命令docker inspect mcr.microsoft.com/windows/nanoserver:1809-amd64,查找哈希值为sha256:bc8517709e9cfff223cb034ff5be8fcbfa5409de286cdac9ae1b8878ebea6b84的层,若该层存在urls字段指向微软官方地址,即可确认是不可分发的foreign层。
  • 验证blob存储路径:Nexus的blob存储默认按哈希值前两位拆分子目录存储,该层的存储路径应为${Nexus数据目录}/blobs/${你的blob存储名}/sha256/bc/sha256:bc8517709e9cfff223cb034ff5be8fcbfa5409de286cdac9ae1b8878ebea6b84,不要直接在根目录搜索文件。
  • 查看Nexus日志:进入Nexus管理后台,打开「支持-日志-日志查看器」,搜索对应层的哈希值,查看是否有找不到文件、尝试访问外网源失败的报错。
  • 确认仓库类型:检查Docker仓库配置,确认是否为你需要的host类型,避免误创建为proxy类型。
解决方案

针对foreign层的通用解决方法

  • 单次推送临时生效:推送时添加强制上传不可分发层的参数,命令如下:
    docker push --allow-nondistributable-artifacts 192.168.10.10:5000/mcr.microsoft.com/windows/nanoserver:1809-amd64
  • 永久生效配置:修改推送镜像的Windows设备上的Docker daemon配置文件daemon.json,添加以下配置:
{
  "allow-nondistributable-artifacts": ["192.168.10.10:5000"]
}

重启Docker服务后,所有推送到该私有仓库的镜像都会自动上传foreign层,无需额外加参数。

其他异常场景的修复

  • 先删除Nexus仓库中已存在的nanoserver镜像的对应标签和manifest,清理无效元数据。
  • 检查Nexus运行用户对blob存储目录的读写权限,确保文件可以正常写入。
  • 若为proxy类型仓库,进入仓库配置页面关闭「Proxy foreign layers」选项,避免Nexus尝试从外网拉取foreign层。

内容的提问来源于stack exchange,提问作者enrinku

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 01:54:05