【问题标题】:Nexus Docker Registry - Failling anonymous pullNexus Docker Registry - 匿名拉取失败
【发布时间】:2016-08-20 22:12:31
【问题描述】:

我使用 Sonatype Nexus 作为私有 Docker 注册表。

虽然它适用于经过身份验证的用户,但尝试使用匿名用户拉取图像是行不通的。这只发生在 docker 客户端上。

使用 Nexus UI(未登录)我可以浏览我的存储库中的图像。但尝试提取图像时出现“未经授权”错误。

以下是 Docker 客户端 和 Nexus 存储库之间的通信捕获流:

Wireshark packet capture

这很奇怪,因为启用了匿名访问,根据文档,我可能有一个 Docker Hosted Registry(通过 HTTPs 端口访问 RW)和一个 Docker Group Registry,指向 Docker Hosted Registry,具有RO/Anonymous 访问权限。

【问题讨论】:

    标签: docker https nexus sonatype


    【解决方案1】:

    此功能是在 Nexus 3.6 中添加的。根据the documentation

    1. 在 Security > Realms 下,启用“Docker Bearer Token Realm”
    2. 在存储库配置中取消选中“强制基本身份验证”

    【讨论】:

    【解决方案2】:

    Nexus 让我很头疼,直到我发现了一个相当晦涩的 sonatype post 声明不要更改匿名领域。

    所以我按照以下步骤进行操作:(在 Nexus 3.19.1 到 3.23.0 中测试)

    1. 与@andrewdotn 的答案相同(启用 Docker 承载令牌 安全 > 领域部分中的领域)

    2. 本地授权领域启用匿名访问(如the above mentioned link 中所述)

    3. 创建 docker(proxy) 存储库(在本例中为代理 hub.docker.com

      3.1。启用 HTTP / HTTPS 端点(取决于你是使用 ssl 连接还是使用反向代理)

      3.2。 enable “允许匿名 docker pull(需要 Docker Bearer Token Realm)”

      3.3。输入 "https://registry-1.docker.io" 作为 "远程存储库的位置"(对于 docker-hub

      3.4。将 "Docker Index" 设置为使用 docker hub 索引(又名:"Use Docker Hub"

      3.5。保存

    4. 确保您的匿名用户有权读取新存储库(默认匿名角色将允许读取更多内容,但应该已经允许匿名拉取)

      4.1。 (可选)如果你想尽可能限制匿名用户(即:只允许 docker pull)创建一个角色 "nx-docker_read"(或类似的)并给它“nx-repository-view-docker--read”*。 (这将允许组中的任何用户从任何 docker 存储库中拉取图像,允许匿名拉取,但在 web-ui 上看不到任何内容)

      4.2。 (如果你做了 4.1)现在剩下的就是将匿名用户的组更改为你的新角色(在我的示例中 “nx-docker_read”)并将其删除from "nx-anonymous" => 匿名用户不能再在 web-ui 上浏览 nexus 但仍然可以拉取图片

    【讨论】:

    • 是否应该在docker(proxy)中配置“docker index”和“location of the remote repostory”?我认为这是不正确的。
    • 好吧,因为 docker(proxy) 应该代理外部注册表,是的(用户界面强迫你这样做,afik)有一个单独的 docker(hosted) 存储库,你不需要它
    • 这解决了我的问题。我更改了匿名用户的领域,这导致匿名访问失败。我永远无法通过更改设置来修复它。我不得不放弃 nexus 安装并重新开始使用这些步骤,最后我得到了一个可以进行匿名拉取的代理。
    • 首先,你更新了我的评论,很高兴我能贡献一些有用的东西 xD 其次,tbh @Brady 最初遇到了和我一样的问题,这反过来又让我很高兴地写这篇文章我并不孤单
    【解决方案3】:

    Docker Registry API 需要对注册表访问进行身份验证,即使对于拉取操作也是如此,Nexus 3 也是如此。 Dockerhub 始终需要访问令牌,即使对于拉取也是如此。 但是你可以从 dockerhub 匿名拉取的原因是它使用了一个令牌服务器,它会自动向匿名用户发放访问令牌。 这种机制在 Nexus 3.0.1 中暂时不可用。 或许会实现(https://issues.sonatype.org/browse/NEXUS-10813)。

    因此,目前使用 Nexus 3,总是需要先登录才能拉取图像(最终匿名用户是您的权限设置方式)。

    【讨论】:

      猜你喜欢
      • 2017-04-27
      • 1970-01-01
      • 1970-01-01
      • 2020-07-01
      • 2018-08-31
      • 1970-01-01
      • 2019-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多