目录

Nexus的docker仓库报错问题汇总

E1: blob unknown to registry

问题现象:

docker push的时候,提示 Layer already exists ,但是最终push完毕的时候,提示: blob unknown to registry

问题背景:

Nexus的社区版本不支持 Docker的加速库和私有仓库 的2个仓库合并对外提供服务,这是企业版特性; 社区版OSS版本,只能另外想办法。

如果你是Nexus的OSS社区版,而且Docker仓库进行了分仓库, 仓库1是proxy代理加速仓库,仓库2是 内部的hosted 私有仓库,仓库3是group仓库,把仓库1和仓库2进行了合并。

而且,因为多个仓库的情况下,不好维护命令,如果你增加了一个前置的Nginx代理分流(GET,HEAD走 仓库3的group合并仓库,同时能pull到 加速库和私有库; POST PUT 自动走 仓库2,可以推送私库),就可能类似的问题。

问题成因

彻底的问题解决方式

经过一番折腾测试,不建议在Nginx上做各种花活,进行复杂的trick,我们就用最简单的方法发解决问题。

搞2个域名,分别负责 pull和push。例如:

最终效果:

docker push的时候, HEAD 查询blob是否存在,一定的走的仓库2,如果blob存在就跳过;PUT POST 也只有仓库2; 最终上传META元数据的时候,一定可以找到所有的blob进行组装。

docker pull的时候,直接走的 仓库3合并库,不用再担心 HEAD请求Layer的问题。因为 推送操作已经切分到其他域名。