Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nexus Docker注册表-失败匿名拉取_Docker_Https_Nexus_Sonatype - Fatal编程技术网

Nexus Docker注册表-失败匿名拉取

Nexus Docker注册表-失败匿名拉取,docker,https,nexus,sonatype,Docker,Https,Nexus,Sonatype,我正在使用SonatypeNexus作为私有Docker注册表 虽然它可以与经过身份验证的用户一起工作,但尝试使用匿名用户提取图像是行不通的。这只发生在docker客户端上 使用Nexus UI(未登录),我可以浏览我的repo上的图像。但是,试图拉图像,我得到一个'未经授权的'错误 以下是Docker客户端与Nexus存储库之间的通信捕获流: 这很奇怪,因为启用了匿名访问,根据文档,我可能有一个Docker托管的注册表(通过HTTPs端口进行RW访问)和一个Docker组注册表,指向一个Do

我正在使用SonatypeNexus作为私有Docker注册表

虽然它可以与经过身份验证的用户一起工作,但尝试使用匿名用户提取图像是行不通的。这只发生在docker客户端上

使用Nexus UI(未登录),我可以浏览我的repo上的图像。但是,试图拉图像,我得到一个'未经授权的'错误

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


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

Docker注册表API要求对注册表访问进行身份验证,即使对于拉操作,Nexus 3也是如此。 Dockerhub始终需要一个访问令牌,即使对于拉取也是如此。 但是,您可以匿名从dockerhub中提取的原因是,它使用一个令牌服务器,自动向匿名用户提供访问令牌。 Nexus 3.0.1暂时无法提供此mecanism。 也许它将被实现()


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

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

  • 在安全>领域下,启用“Docker承载令牌领域”
  • 取消选中存储库配置中的“强制基本身份验证”

  • Nexus让我很头疼,直到我找到了一个相当模糊的 声明不更改匿名域

    因此,我遵循以下步骤来实现此功能:(在Nexus 3.19.1到3.23.0中进行了测试)

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

  • 为本地授权领域启用匿名访问(如中所述)

  • 创建docker(代理)存储库(在本例中为代理)

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

    3.2。启用“允许匿名docker拉取(需要docker承载令牌域)”

    3.3。输入“”作为“远程存储库的位置”(用于)

    3.4。设置“Docker索引”以使用Docker hub索引(又名:“使用Docker hub”)

    3.5。拯救

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

    4.1。(可选)如果您希望尽可能限制匿名用户(即:仅允许docker拉入),请将角色包装为“nx-docker_read”(或类似角色),并将其命名为“nx存储库视图docker--read”*。(这将允许组中的任何用户从任何docker存储库中提取图像,允许非提取,但在web ui上看不到任何内容)

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


  • 对于3.16.2,步骤1就足够了,并且在存储库配置中没有更多的“强制基本身份验证”复选框。对于3.17.0,我不得不将步骤2替换为:2。在安全>匿名下的主管理导航菜单上:选中“允许匿名用户访问服务器”,用户名=匿名,并将域更改为“Docker承载令牌域”,上述链接不再工作。新链接:甚至更新的信息:应该在docker(代理)中配置“docker索引”和“远程repostory的位置”吗?我认为这是不对的。既然docker(代理)应该代理一个外部注册表,是的(ui强迫你,afik)有一个单独的docker(托管)存储库,你不需要它。这解决了我的问题。我更改了匿名用户的域,这导致匿名访问失败。我无法通过更改设置来修复它。我不得不放弃nexus的安装并重新开始使用这些步骤,最终我得到了一个可以接受anon-pull的代理。首先,感谢你更新我的评论,很高兴我能贡献一些有用的东西xD。其次,tbh@Brady最初遇到了和我一样的问题,这反过来又促使我写了这篇文章,我很高兴我不是一个人