Linux oras 的 OCI Artifact 推送与 Helm chart 作为 artifact 存储

大静君_6998

大静君_6998

2026-02-23

844人浏览

原创

根本原因是目标仓库不支持OCI Artifact或未指定--manifest-type;Helm chart需显式声明application/vnd.cncf.helm.chart.layer.v1+tar类型,且必须为helm package生成的.tgz文件,否则oras按默认镜像类型解析失败。

linux oras 的 oci artifact 推送与 helm chart 作为 artifact 存储

oras push 为什么报错 “failed to resolve reference”

根本原因通常是目标仓库不支持 OCI Artifact,或 oras 没指定正确的 --manifest-type。Helm chart 本身不是标准 OCI image,必须显式声明为 artifact 类型,否则 oras 默认按 application/vnd.oci.image.manifest.v1+json 尝试解析,而 Helm chart 的 index.yaml 或 Chart.yaml 不符合该结构,直接失败。

  • 确认 registry 支持 OCI Artifact:Harbor ≥ 2.8、GitHub Container Registry、Azure Container Registry 都可以;Docker Hub 不支持
  • 推送前必须用 oras push --manifest-type application/vnd.cncf.helm.chart.layer.v1+tar 显式指定 Helm 层类型,不能省略
  • 确保本地 chart 已打包为 .tgz 文件(用 helm package 生成),oras 不接受目录直推
  • 错误信息如 failed to resolve reference: unexpected media type "" 就是没设 --manifest-type 的典型表现

如何把 Helm chart 正确打包并推送到 Harbor

关键在两步:先生成合规的 .tgz,再用匹配的 media type 推送。Harbor 对 artifact 的校验比普通镜像更严格,media type 必须与内容一致,否则拉取时 helm pull 会拒绝解析。

  • 用 helm package mychart/ 生成 mychart-0.1.0.tgz,不要手动 tar 或改后缀
  • 推送命令示例:oras push myharbor.example.com/project/mychart:0.1.0 mychart-0.1.0.tgz --manifest-type application/vnd.cncf.helm.chart.layer.v1+tar
  • 如果 Harbor 启用了项目级权限,确保 token 或用户名密码有 push 权限,否则报 unauthorized: authentication required
  • 推送后可在 Harbor UI 的“Artifacts”标签页看到类型为 Helm Chart 的条目,而非 Image

helm pull 能否直接拉取 oras 推送的 artifact

可以,但依赖 Helm CLI 版本和 registry 配置。Helm v3.8+ 原生支持从 OCI registry 拉取 chart,但必须用完整 OCI 地址格式,且 registry 必须返回正确的 Content-Type 头。

Obsidian (Linux)
Obsidian (Linux)

操作 Obsidian 库(纯 Markdown 笔记),并通过 notesmd-cli 实现自动化。

下载
  • 拉取命令:helm pull oci://myharbor.example.com/project/mychart --version 0.1.0(注意是 oci:// 前缀)
  • 若报 failed to do request: Head "https://.../v2/.../blobs/...": dial tcp: lookup ...: no such host,大概率是 helm 解析 registry 地址失败,检查是否漏了协议或拼写错误
  • Harbor 需开启 content-trust 或至少允许非签名 artifact,否则某些版本 Helm 会静默跳过
  • helm show values 和 helm install 对 OCI 源的行为与传统 repo 一致,无需额外插件

替代方案:用 helm chart repo vs oras 推送的取舍

OCI 方式更适合作为 CI/CD 流水线中的一环,尤其当团队已统一使用 Harbor 或 ACR;但若只是内部快速共享,传统 helm serve 或 GitHub Pages + helm repo index 更轻量。

  • oras 推送后无法通过 helm search repo 发现,必须知道确切地址,缺少索引发现能力
  • CI 中自动打 tag 并推送 OCI 是原子操作,避免了 helm repo update 的网络抖动风险
  • 多个 chart 共享同一 registry 凭据,权限模型比 HTTP basic auth 更清晰
  • 但调试困难:没有 helm repo list 对应的 oras list,得靠 registry UI 或 curl -H "Authorization: ..." https://reg/v2/_catalog 查

OCI artifact 的核心约束就一条:media type 必须真实反映内容,且 registry 必须认它。推错一次,后续拉取链就断了,重试前先 oras delete 干净再推。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

linux

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2023.08.07

2235

5

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.23

3582

1

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

2023.10.13

1196

3

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

2025.09.10

4139

7

curl_exec
curl_exec

curl_exec函数是PHP cURL函数列表中的一种,它的功能是执行一个cURL会话。给大家总结了一下php curl_exec函数的一些用法实例,这个函数应该在初始化一个cURL会话并且全部的选项都被设置后被调用。他的返回值成功时返回TRUE, 或者在失败时返回FALSE。

2023.06.14

3803

6

linux常见下载安装工具
linux常见下载安装工具

linux常见下载安装工具有APT、YUM、DNF、Snapcraft、Flatpak、AppImage、Wget、Curl等。想了解更多linux常见下载安装工具相关内容,可以阅读本专题下面的文章。

2023.10.30

895

4

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

2023.09.14

14706

6

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.14

1725

5

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

2023.12.21

4097

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习