使用Sonatype nexus控制对docker注册表的访问
在我们当前的设置中,我们对整个docker hub进行代理以获取图像,但我们希望将此代理仅限于ubuntu、apache等官方索引。 在配置存储库的过程中,有一个为存储库设置使用Sonatype nexus控制对docker注册表的访问,docker,nexus,sonatype,Docker,Nexus,Sonatype,在我们当前的设置中,我们对整个docker hub进行代理以获取图像,但我们希望将此代理仅限于ubuntu、apache等官方索引。 在配置存储库的过程中,有一个为存储库设置自定义索引的选项,因此我的两个问题是: 使用此自定义索引选项,我是否能够实现上面解释的目标 如果是,那么我应该从哪里获取自定义索引的URL。到目前为止,我尝试使用https://hub.docker.com/_/centos/用于centos,但不起作用 请建议如何进行此操作。是的,您可以使用自定义索引来限制回购协议中的
自定义索引的选项,因此我的两个问题是:
- 使用此
自定义索引
选项,我是否能够实现上面解释的目标
- 如果是,那么我应该从哪里获取自定义索引的URL。到目前为止,我尝试使用
https://hub.docker.com/_/centos/
用于centos,但不起作用
请建议如何进行此操作。是的,您可以使用自定义索引来限制回购协议中的可用内容。要实现这一点,您必须部署和维护自己的docker注册表索引服务,并在配置docker代理存储库时使用该服务
然而,一个更简单的解决方案是使用内容选择器来限制通过docker代理存储库允许访问的内容,同时仍然使用docker Hub的原始索引
使用简化的内容选择器解决方案有点麻烦,但可能适合您。基本上,您必须以正则表达式的形式提供白名单(或黑名单)。这个解决方案的含义是,您的注册表用户仍然可以搜索任何可用的图像,因为为了简单起见,您可以继续使用Docker Hub的索引
创建指向docker中心的docker代理存储库
使用图像的白/黑列表创建内容选择器,例如,path=~'^/v2/library/(alpine | ubuntu)。*$”
将只允许下载alpine
和ubuntu
创建类型为存储库内容选择器的新权限
创建包含上述权限的角色
创建具有上述角色的用户
现在,您创建的用户将登录到您的注册表,例如,$docker login nexus.local:8085
。该用户将被授权拉取alpine
和ubuntu
(基于第2步的内容选择器),但将无法下载任何其他内容
成功拉动的示例:
$docker pull nexus.本地:8085/alpine
使用默认标记:最新
最新消息:从阿尔卑斯山出发
摘要:sha256:0873C923E00E0FD2BA78041BFB64A105E1ECB7678916D1F777311E45BF5634B
状态:nexus的图像是最新的。本地:8085/阿尔卑斯山:最新
拉取失败的示例:
$docker pull nexus.本地:8085/postgres
使用默认标记:最新
来自守护程序的错误响应:未经授权:未授权访问请求的资源
我们正在做整个docker hub的代理来提取图像,但我们想要的是将此代理仅限于官方索引,如ubuntu、apache
我所做的是:
- 创建路由规则
模式:
允许
- 我只想要
alpine
和centos
,因此我创建了两个匹配项:
^/v2/library/centos.$
^/v2/library/alpine.*$
- 转到docker代理存储库的配置
- 转到路由规则
这样,除了centos和alpine之外,其他所有产品都可以通过docker代理回购协议获得。提取任何其他内容都会导致docker出现“manigest unknown”错误。谢谢@Dawid。。你能解释一下内容选择器部分吗。。我们如何在nexus中使用它?对不起,如果我的问题看起来很傻:Doh。。我没有收到任何更新的通知。。我一定会告诉你最新情况的。谢谢你,伙计@GovindMantri运气好吗?今天试过了。。但显然没有起作用。。可能我需要检查应用于它的角色。谢谢@KamilCuk,我将尝试更新并共享更新。