Nexus3:推送到 Docker Group Repo
Nexus3: Push to Docker Group Repo
我有 Nexusv3.6 并创建了一个 Docker 存储库 docker-repo
(类型:托管)和一个 Docker 组 docker-group
(类型:组)。
对于两者,我都启用了 HTTPS 连接器:
docker-repo
端口 8101
和 docker-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
我有 Nexusv3.6 并创建了一个 Docker 存储库 docker-repo
(类型:托管)和一个 Docker 组 docker-group
(类型:组)。
对于两者,我都启用了 HTTPS 连接器:
docker-repo
端口 8101
和 docker-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