Nexus3:推送至Docker Group Repo

Mun*_*kin 3 nexus docker docker-registry

我拥有Nexusv3.6,并创建了一个Docker存储库docker-repo(类型:托管)和一个Docker组docker-group(类型:group)。我都启用了HTTPS连接器在此处输入图片说明

docker-repo在港口8101docker-group在港口8102

我加docker-repodocker-group

现在,我可以docker-repo像这样直接将图像推入/拉出:

docker push myhost.com:8101/mymimage:latest
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试像这样推动该小组时:

docker push myhost.com:8102/docker-repo/mymimage:latest
Run Code Online (Sandbox Code Playgroud)

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

任何想法在这里有什么问题?

Mun*_*kin 6

根据有关 docker 存储库组的官方文档

存储库组是公开所有存储库以供用户读取访问权限的推荐方式。

并且,来自关于在私有注册表中推送图像的文档

您不能推送到存储库组或代理存储库。

  • 今天确实如此,但这个想法确实有一些优点。请参阅此处:https://issues.sonatype.org/browse/NEXUS-10471 (4认同)

pav*_*kin 5

我使用NGINX解决了此问题,如下所示: Updated

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

所有HEAD*和GET请求都被代理到docker存储库组(托管+代理)。所有“正在更改”的请求都直接代理到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/$1 last;
            }
            rewrite ^/(.*)$ /repository/docker/$1 last;
        }

        location ~ ^/(v1|v2)/ {
            if ($request_method ~* (POST|PUT|DELETE|PATCH) ) {
                rewrite ^/(.*)$ /repository/docker-hosted/$1 last;
            }
            rewrite ^/(.*)$ /repository/docker/$1 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";
        }
    }
Run Code Online (Sandbox Code Playgroud)

您可以通过运行以下命令来验证设置:

    server {
        listen   *:443 default_server ssl;

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

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

        location ~ ^/(v1|v2)/ {
            if ($request_method ~* (POST|PUT|DELETE|PATCH) ) {
                rewrite ^/(.*)$ /repository/docker-hosted/$1 last;
            }
            rewrite ^/(.*)$ /repository/docker/$1 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";
        }
    }
Run Code Online (Sandbox Code Playgroud)