Docker 拉取出现 406 或 OCI index 不支持怎么办?
本文适用于:
- • 拉取时出现 HTTP
406相关错误 - • 报错含
OCI index found, but accept header does not support oci indexes - • Docker / containerd 版本较旧,拉取多架构(manifest list / OCI index)镜像失败
- • 需与「410 Gone」(Registry V1 协议)和「no matching manifest」(架构不匹配)区分
先搞清一点:406 通常表示客户端太旧,无法协商现代清单格式
当镜像提供 OCI index 或 manifest list(多架构索引)时,旧版 Docker 客户端在 HTTP 协商阶段无法声明接受该媒体类型,Registry 会返回 406 Not Acceptable。 这与镜像源是否为轩辕加速无直接关系,升级本机 Docker 组件后通常即可恢复。
典型报错示例
docker pull nginx:latest
Error response from daemon: manifest for nginx:latest not found: manifest unknown: OCI index found, but accept header does not support oci indexes
部分环境会在外层再包一层 406 状态码描述,核心信息仍是客户端不支持 OCI index。
常见原因
- Docker Engine 版本过旧:低于 20.10 的版本对 OCI 清单与 index 的支持不完整;建议升级到 20.10+,更好是 24.x / 25.x
- 内置 Docker 组件陈旧:群晖 DSM、旧版 Kubernetes 节点、部分 NAS 或国产发行版自带的 Docker 长期未更新
- 多架构镜像要求更高:同时包含 amd64、arm64 等平台的官方镜像(如
nginx、redis)普遍使用 manifest list,对客户端版本更敏感
处理步骤
1)确认当前 Docker 版本
docker version
docker info | grep -i "Server Version"
若 Server Version 明显低于 20.10,应优先安排升级。
2)升级 Docker 到较新版本
Linux 可参考 Linux Docker 安装与升级教程。群晖、统信、麒麟等请通过系统套件中心或厂商文档升级 Docker 套件,不要仅升级内核而忽略 containerd / dockerd。
3)升级后重新拉取
升级完成并重启 Docker 服务后,重新执行 docker pull。 若需指定单一架构,可参考 如何拉取指定 CPU 架构的镜像。
与相近错误的区分
- 406 / OCI index:客户端太旧,无法处理多架构索引 → 升级 Docker
- 410 Gone:客户端尝试 Registry V1 协议 → 同样需要升级 Docker,但报错形态不同
- no matching manifest:客户端版本正常,但镜像未提供当前 CPU 架构 → 换镜像或换运行环境
- Schema 1 已废弃:镜像清单格式过老,通常报 422 或 schema 1 字样 → 换新版镜像,无法仅靠升级客户端解决
你可能还会遇到:
本文由「轩辕镜像」维护
轩辕镜像 | 国内 Docker 镜像加速
内容基于轩辕镜像真实用户使用与实测整理