拉取GitHub Packages中OCI清单时出现MANIFEST_UNKNOWN错误的原因及解决方法咨询
拉取GitHub Packages中OCI清单时出现MANIFEST_UNKNOWN错误的原因及解决方法咨询
嗨,我之前折腾OCI镜像注册表的时候也碰到过一模一样的问题,给你拆解下原因和解决办法哈~
错误原因解析
你请求的这个homebrew/core/vim:9.0.1900是一个多架构OCI镜像索引(简单说就是它包含了不同CPU架构比如amd64、arm64等的镜像清单集合)。而你的curl请求没有设置正确的Accept请求头,告诉GitHub Packages注册表你能够接收这种OCI索引格式的内容。默认情况下curl的Accept头并不包含OCI索引的媒体类型,所以注册表就返回了MANIFEST_UNKNOWN这个错误,本质是你的请求不兼容它要返回的内容格式。
解决办法
只需要在curl命令里加上支持OCI索引的Accept头就行啦,具体可以这么做:
方法1:仅请求OCI索引格式
直接指定接受OCI索引的媒体类型:
curl -H "Authorization: Bearer QQ==" -H "Accept: application/vnd.oci.image.index.v1+json" https://ghcr.io/v2/homebrew/core/vim/manifests/9.0.1900
方法2:兼容多种清单格式
如果你不确定要哪种格式,也可以同时指定OCI索引和普通Docker镜像清单的媒体类型,让注册表自动适配:
curl -H "Authorization: Bearer QQ==" -H "Accept: application/vnd.oci.image.index.v1+json, application/vnd.docker.distribution.manifest.v2+json" https://ghcr.io/v2/homebrew/core/vim/manifests/9.0.1900
额外说明(如果需要特定架构的镜像清单)
要是你其实是想获取某个特定架构(比如amd64)的单独镜像清单,可以先通过上面的命令拿到OCI索引内容,找到对应架构的镜像digest,再用这个digest去请求具体的清单。比如拿到索引后找到manifests数组里对应架构的digest值,然后执行类似下面的命令:
curl -H "Authorization: Bearer QQ==" https://ghcr.io/v2/homebrew/core/vim/manifests/<对应架构的digest值>
备注:内容来源于stack exchange,提问作者Michael Altfield
相关产品推荐
相关产品推荐

