用例:允许拉动已选择(例如标记为*-public
)Docker 镜像匿名。否则需要凭证。
鉴于:最新的 Nexus 3.52.0,它可以与docker login
LDAP 凭据一起使用而不会出现问题。
尝试过:
- 选择器 + 特权 + 角色(全部命名为 docker-images-public)> 指定使用“匿名”,启用“匿名访问”,使用相同的用户和本地授权领域。
- 结果:守护进程的错误响应:获取 https://HOST/v2/infrastructure/IMAGE/manifests/VERSION-public:没有基本身份验证凭据预期:能够 docker pull 图像,与内容选择器匹配(例如“。*-public”)
另外尝试过:
在日志中启用TRACE日志级别
结果:输出很多,但没有具体的拒绝原因(至少我没有看到)。以下字符串之一:
DEBUG [qtp194038341-106] *UNKNOWN org.sonatype.nexus.repository.view.Router - Response: Response{status=Status{successful=false, code=401, message='null'}, payload=StringPayload{size=113, charset=UTF-8, contentType='application/json'}}
无需在前端使用 Nginx(例如 docker pull HOST:5000/IMAGE:VERSION-public,通过 HTTP)
结果:相同。原因:看到 StackOverflow 回答提到了 Auth 标头修改。想将 Nginx 完全排除在方程之外。
简化选择器
选择器是
format == "docker" && ( path == "/v2/" || path =~ ".*public" || path == "/v2/.*")
选择器在几次尝试中被修改,包括来自的建议https://stackoverflow.com/questions/43354352/nexus-docker-and-restricting-access-via-content-selector(很可能不是)但是,错误与选择器无关,因为即使使用format == "docker" && path =~ ".*"
赋予
anonymous
用户nx-admin
角色结果:同样的错误,所以原因不在
anonymous
权限上激活
Docker Bearer Token Realm
,按照https://help.sonatype.com/repomanager3/nexus-repository-administration/formats/docker-registry/docker-authentication结果:同样的错误
在存储库级别启用匿名访问(复选框“允许匿名 docker pull(需要 Docker Bearer Token Realm)”)
结果:整个存储库都可以匿名访问。不会这样做。
我看到的唯一其他选择是在不同的端口上创建一个单独的 docker 存储库,仅供公共匿名访问。
答案1
缺少的部分是:nx-anonymous
从用户中删除默认角色anonymous
,以允许其拉取整个存储库。
总体来说,配置:
- 创建选择器
format == "docker" && path =~ ".*-public"
+ 权限 + 角色 (均已命名docker-images-public
) - #admin/security/realms-激活
Docker Bearer Token Realm
- #admin/repository/repositories:docker-repository,启用
Allow anonymous docker pull ( Docker Bearer Token Realm required )
docker 存储库复选框 - #管理员/安全/用户:匿名
- 删除授予拉取所有图像权限的
nx-anonymous
用户角色anonymous
- 授予新
docker-images-public
角色