Nexus3:推送至Docker集团回购
我拥有Nexusv3.6并创建了Docker repoNexus3:推送至Docker集团回购,docker,nexus,docker-registry,Docker,Nexus,Docker Registry,我拥有Nexusv3.6并创建了Docker repoDocker repo(类型:托管)和Docker groupDocker group(类型:组)。 对于我启用的两个HTTPS连接器: docker repo在端口8101和docker group在端口8102上 我将docker repo添加到我的docker组 现在我可以直接向docker repo推/拉图像,就像: docker push myhost.com:8101/mymimage:latest 但当我试图像这样推动团队时:
Docker repo
(类型:托管)和Docker groupDocker group
(类型:组)。
对于我启用的两个HTTPS连接器:
docker repo
在端口8101
和docker group
在端口8102
上
我将docker repo
添加到我的docker组
现在我可以直接向docker repo推/拉图像,就像:
docker push myhost.com:8101/mymimage:latest
但当我试图像这样推动团队时:
docker push myhost.com:8102/docker-repo/mymimage:latest
我收到一个错误,上面写着:解析HTTP 404响应正文时出错:无效字符“,根据官方消息:
建议使用存储库组来公开所有存储库
用于读取用户访问权限的存储库
并且,从关于
您不能推送到存储库组或代理存储库
我用NGINX解决了这个问题,如下所示:
已更新
在下面的示例中,“repository/docker”是一个组合docker代理和docker托管存储库的组
所有HEAD
*和GET
请求都被代理到docker存储库组(托管+代理)。
所有“更改”请求都直接代理到docker托管的存储库。
*一个例外HEAD/v2/../blob/
应该代理托管repo,因为它在将blob推送到托管repo之前调用,我们必须检查托管repo中是否存在blob。否则我们会得到一个错误:blob未知:blob对注册表未知
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";
}
}
您可以通过运行以下命令来验证设置:
#通过代理拉取
docker pull nexus.your.domain/ubuntu
#推送到托管存储库
docker push nexus.your.domain/ubuntu
这在今天是正确的,但这个想法确实有一些优点。看这里:即使我们想从小组中抽签,你也应该得到+1。如果您知道如何从docker组存储库而不是代理中提取,请ping我。不太理解您的问题。在我的示例repository/docker
中,这就是这个组。有人能把它翻译成ApacheHTTPD吗?