使用Sonatype nexus控制对docker注册表的访问

使用Sonatype nexus控制对docker注册表的访问,docker,nexus,sonatype,Docker,Nexus,Sonatype,在我们当前的设置中,我们对整个docker hub进行代理以获取图像,但我们希望将此代理仅限于ubuntu、apache等官方索引。 在配置存储库的过程中,有一个为存储库设置自定义索引的选项,因此我的两个问题是: 使用此自定义索引选项,我是否能够实现上面解释的目标 如果是,那么我应该从哪里获取自定义索引的URL。到目前为止,我尝试使用https://hub.docker.com/_/centos/用于centos,但不起作用 请建议如何进行此操作。是的,您可以使用自定义索引来限制回购协议中的

在我们当前的设置中,我们对整个docker hub进行代理以获取图像,但我们希望将此代理仅限于ubuntu、apache等官方索引。 在配置存储库的过程中,有一个为存储库设置
自定义索引的选项,因此我的两个问题是:

  • 使用此
    自定义索引
    选项,我是否能够实现上面解释的目标
  • 如果是,那么我应该从哪里获取自定义索引的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,我将尝试更新并共享更新。