问题

最近升级 Docker-Desktop 后,发现 push 镜像到 nexus 注册表时,报错如下:

error from registry: unknown

升级到 v4.42.1 时,甚至出现镜像不能顺利上传的问题。

解决

通过查阅相关 issue , 发现是 nexus 版本太低,不支持目前主流的 OCI 镜像标准,如果想要解决,可以有两种方法解决:

1 升级 nexus 版本,从稳定版 Nexus 3.47.1 支持 OCI,升级到此版本以上即可解决。

2 通过 –provenance=false 参数解决,–provenance 标志是 docker buildx build 命令的一个选项,用于控制是否生成 provenance 凭证 。它是 –attest=type=provenance 的简写形式 。

启用 Provenance (默认行为): 在较新版本的 Buildx 中,provenance 凭证是默认启用的 。您也可以显式地使用 true 来启用它,这会以 mode=min 的模式附加凭证 为了兼容旧的镜像仓库,可以禁用。

小结

本文讲述了在使用 docker push 时遇到由于注册表版本太低导致的推送镜像失败问题,并提出了两个解决方案,对于两个方案,如果允许升级的话,最好还是更新 nexus 版本来解决,不能升级的话可以使用 –provenance=false 参数解决。

参考