Nexus Docker Registry - Failling anonymous pull



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

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

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

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

Wireshark 数据包捕获

这很奇怪,因为启用了匿名访问,并且根据文档,我可能有一个 Docker 托管注册表(通过HTTPs端口RW访问)和一个 Docker 组注册表,指向 Docker 托管注册表,具有RO/Anonymous访问权限。

此功能是在 Nexus 3.6 中添加的。根据文档:

  1. 在"安全>领域"下,启用"Docker 持有者令牌领域"
  2. 取消选中存储库配置中的"强制基本身份验证"

Nexus让我相当头疼,直到我找到一个相当晦涩的声纳型帖子声明不更改匿名领域。

因此,我遵循的步骤使其正常工作:(在Nexus 3.19.1至3.38.1中进行了测试)

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

  2. 本地授权领域启用匿名访问(如上述链接所述)

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

3.1. 启用 HTTP/HTTPS 端点(取决于您是 SSL 连接到结点还是使用反向代理)

3.2. 启用"允许匿名 docker 拉取(需要 Docker 持有者令牌领域)"

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

3.4. 将"Docker 索引"设置为使用 Docker Hub 索引(又名:"使用 Docker Hub")

3.5. 保存

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

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

4.2. (如果你做了 4.1)现在剩下的就是将 Anon 用户的组更改为您的新角色(在我的示例中为"NX-docker_read"),并将其从"nx-anonymous"中删除 => 匿名用户不能再在 Web-UI 上眉毛连结,但仍然可以拉取图像

Docker Registry API 需要身份验证才能访问注册表,即使是拉取操作也是如此。Dockerhub始终需要访问令牌,即使是拉取。但是你可以从dockerhub匿名拉取的原因是它使用了一个令牌服务器,它会自动向匿名用户提供访问令牌。这种机制目前在Nexus 3.0.1中不可用。也许它将被实施(https://issues.sonatype.org/browse/NEXUS-10813)。

因此,目前使用 Nexus 3,它始终需要在拉取图像之前登录(最终匿名用户是您的权限以这种方式设置的)。

最新更新