使用 podman 推送数据到私有仓库的 3 个问题记录

写在前面,什么是 podman

因为公司不让用 docker,所以可以理解为 podman 是 docker 的替代。

Podman 设计上是兼容 Docker 的,这意味着你可以用 Podman 替代 Docker,而不需要对现有的Docker环境或脚本做太多改变。


场景:推送镜像到私有仓库,报了如下三个错误,记录一下

podman push xxxxxxx
  • 问题 1: Error: trying to reuse blob sha256:e0781bc8667fb5ebf954df4ae52997f6f5568ec9f07e21e5db7c9d324ed41e1f at destination: pinging container registry harbor.xxxx.xxxx.xxxx.xxxx: Get "https://harbor.xxxx.xxxx.xxxx.xxxx/v2/": tls: failed to verify certificate: x509: certificate relies on legacy Common Name field, use SANs instead
  • 问题 1 的解决方案:增加参数 --tls-verify=false 解决了该问题

  • 问题 2:Error: writing blob: initiating layer upload to /v2/xxxx/blobs/uploads/ in harbor.xxxx.xxxx.xxxx.xxxx: requested access to the resource is denied

  • 问题 2 的解决方案:需要先登录

    podman login harbor.xxxx.xxxx.xxx.xxxx -u xxxxxxxx -p xxxxxxxx
    

  • 问题 3:Error: writing manifest: uploading manifest 7.4.0 to harbor.xxxx.xxxx.xxxx.xxxx/xxxxxx: manifest invalid
  • 问题 3 的解决方案:增加参数 --format v2s2 解决了该问题

--format v2s2 的解释

问题 3 中提到的错误是关于上传容器镜像到 Harbor 仓库时的问题。错误信息提示上传的镜像清单(manifest)无效。解决方法是增加 --format v2s2 参数。

  • format 参数的选择:Docker 镜像格式通常有两种选择,分别是 v2s1 和 v2s2:
    • v2s1(Schema 1):是 Docker Registry HTTP API V2 的早期版本,已经不推荐使用。
    • v2s2(Schema 2):是推荐的现代格式,提供了更多的特性和改进。
      这两种格式的含义:

v2s1(Schema 1):它是 Docker 镜像分发的第一个版本,支持签名,但缺乏其他一些功能,例如内容寻址和多平台镜像支持。
v2s2(Schema 2):这个版本添加了一些重要的功能,例如内容寻址,这样可以通过校验和来验证镜像的完整性,同时支持多架构镜像和清单列表。

为何会报错:

报错可能是因为 Harbor 仓库配置为只接受 Schema 2 的镜像格式,而尝试上传的镜像可能是旧的 Schema 1 格式,或者镜像清单文件有其他问题。通过明确指定 --format v2s2,确保上传的是兼容的镜像格式,从而解决了问题。

最终的命令

podman push xxxxxxx --tls-verify=false --format v2s2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值