拉取老镜像提示 Schema 1 已废弃怎么办?
本文适用于:
- • 拉取时出现
422 Unknown,且正文含 schema 1 / manifest v1 相关描述 - • 报错含
schema 1 support has been removed、manifest schema v1 unsupported等 - • 需要拉取较老的官方镜像,如
php:5.4.x、mysql:5.5.x等 - • 需与「manifest unknown」(镜像不存在)和「422 Unknown 泛化报错」区分
先搞清一点:这是 Docker 生态对旧清单格式的整体限制
镜像发布于 2017 年前后、使用已废弃的 Manifest Schema 1 时,现代 Docker 客户端与 Docker Hub 均不再支持拉取。 这不是轩辕镜像加速服务单独造成的限制,换任何镜像源或直连 Docker Hub 通常同样无法拉取。
典型报错示例
docker pull php:5.4.45-fpm
Error response from daemon: manifest for php:5.4.45-fpm not found: manifest unknown: manifest schema v1 unsupported
Error response from daemon: Docker Image Format v1 and Docker Image manifest version 2, schema 1 support has been removed
unexpected status from HEAD request ... 422 Unknown
schema 1 support has been removed
不同 Docker 版本措辞略有差异,但核心信息一致:Schema 1 清单已不再被支持。
常见场景
- 拉取很老的官方镜像标签,例如
php:5.4.x、mysql:5.5.x、早期node:0.x等 - 镜像最后一次推送在 Docker 全面转向 Schema 2 / OCI 之前,清单仍为 Schema 1 格式
- 业务脚本或 compose 文件仍固定引用多年前停更的版本号
处理建议(按优先级)
1)优先升级到较新的镜像版本(推荐)
在业务允许的前提下,改用仍维护、使用现代清单格式的标签,例如 php:7.4-fpm、php:8.2-fpm、mysql:8.0 等。 到 Docker Hub 确认该镜像当前可用标签。
2)业务必须用老版本时:自行导入并推到私有仓库
若你仍持有该镜像的 tar 包或能从可信渠道获得,可用 docker load 导入后推到 Harbor 等私有仓库; 也可在仍能访问旧格式的环境中用 skopeo copy 等工具迁移。 更多离线思路见 docker save / load 离线迁移。
注意:轩辕镜像不支持 docker push,无法直接把本地镜像上传到加速域名,需使用自有 Registry。
3)此类问题无法通过「换镜像源」解决
升级轩辕镜像套餐、更换加速域名或调整 registry-mirrors 均不能恢复对 Schema 1 的支持。 根本原因是客户端与上游仓库已不再接受该格式。
延伸阅读:Docker 官方对废弃镜像格式的说明见 Deprecated image formats。若报错为泛化的 422 Unknown 且不含 schema 1 字样,请参考 422 Unknown 上游异常排查。
你可能还会遇到:
- • docker pull 提示 no matching manifest 怎么办?
- • 镜像已拉取完成,却提示 invalid tar header 或 failed to register layer 怎么办?
- • Docker pull 时 HTTPS / TLS 证书验证失败怎么办?
- • Docker pull 时 DNS 解析超时或连不上仓库怎么办?
- • docker 无法连接轩辕镜像域名怎么办?
- • docker login 提示 Cannot autolaunch D-Bus,还算登录成功吗?
- • docker pull 提示无法连接 docker.sock / daemon 未运行怎么办?
- • docker pull 提示 remote trust data does not exist 怎么办?
本文由「轩辕镜像」维护
轩辕镜像 | 国内 Docker 镜像加速
内容基于轩辕镜像真实用户使用与实测整理