Nexus3:推送到 Docker Group Repo

Nexus3: Push to Docker Group Repo

我有 Nexusv3.6 并创建了一个 Docker 存储库 docker-repo(类型:托管)和一个 Docker 组 docker-group(类型:组)。 对于两者,我都启用了 HTTPS 连接器:

docker-repo 端口 8101docker-group 端口 8102.

我将 docker-repo 添加到我的 docker-group

现在我可以 push/pull 一张图片 to/from docker-repo 直接喜欢:

docker push myhost.com:8101/mymimage:latest

但是当我尝试像这样推送到群组时:

docker push myhost.com:8102/docker-repo/mymimage:latest

我收到一条错误消息:error parsing HTTP 404 response body: invalid character '<' looking for beginning of value

知道这里的问题是什么吗?

根据官方documentation about repository groups for docker

A repository group is the recommended way to expose all your repositories for read access to your users.

并且,来自关于 pushing images in private registries

的文档

You can not push to a repository group or a proxy repository.

我用NGINX解决了这个问题如下: 已更新

在以下示例中,"repository/docker" 是一个组合了 docker-proxy 和 docker-hosted 存储库的组。

所有 HEAD* 和 GET 请求都代理到 docker 存储库组(托管 + 代理)。 所有 "changing" 请求都直接代理到 docker 托管的存储库。
*一个例外。 HEAD /v2/.../blobs/ 应该代理到托管仓库,因为它在将 blob 推送到托管仓库之前调用,我们必须检查托管仓库中是否存在 blob。否则我们会得到一个错误:blob unknown: blob unknown to registry

    server {
        listen   *:443 default_server ssl;

.........................

        location ~ ^/(v1|v2)/[^/]+/?[^/]+/blobs/ {
            if ($request_method ~* (POST|PUT|DELETE|PATCH|HEAD) ) {
                rewrite ^/(.*)$ /repository/docker-hosted/ last;
            }
            rewrite ^/(.*)$ /repository/docker/ last;
        }

        location ~ ^/(v1|v2)/ {
            if ($request_method ~* (POST|PUT|DELETE|PATCH) ) {
                rewrite ^/(.*)$ /repository/docker-hosted/ last;
            }
            rewrite ^/(.*)$ /repository/docker/ last;
        }

        location / {
            proxy_pass http://nexus:8081/;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto "https";
        }
    }

您可以通过运行验证设置:

# pull via proxy
docker pull nexus.your.domain/ubuntu

# push to the hosted repository
docker push nexus.your.domain/ubuntu