You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitLab容器扫描对接禁用匿名的Nexus Sonatype 3.66报错求助

解决GitLab容器扫描Nexus私有镜像的认证问题

核心问题分析

错误日志中明确指出remote error: ... UNAUTHORIZED: access to the requested resource is not authorized,这是禁用Nexus匿名访问后,GitLab容器扫描任务未携带合法认证信息拉取镜像导致的。本地容器runtime(docker/containerd/podman)不可用的问题不影响核心扫描,只要远程扫描的认证配置正确即可正常执行。

解决方案步骤

1. 在GitLab项目中添加Nexus认证变量

进入GitLab项目的Settings > CI/CD > Variables,添加以下安全变量(类型选"Variable",勾选"Protect variable"和"Mask variable"):

  • CONTAINER_REGISTRY: 你的Nexus仓库地址,例如nexus-server:5000
  • CONTAINER_REGISTRY_USER: 拥有Nexus镜像拉取权限的用户名
  • CONTAINER_REGISTRY_PASSWORD: 对应用户的密码

2. 调整GitLab CI配置

在你的.gitlab-ci.yml中,除了包含官方模板外,可显式配置扫描目标和相关变量:

include:
  - template: Jobs/Container-Scanning.gitlab-ci.yml

container_scanning:
  variables:
    # 指定要扫描的镜像地址与标签
    CI_APPLICATION_REPOSITORY: nexus-server:5000/ubi-carvel
    CI_APPLICATION_TAG: 3778
    # 强制使用远程扫描模式,规避本地runtime依赖
    DOCKER_IMAGE: "registry.gitlab.com/gitlab-org/security-products/container-scanning:latest"

3. 可选:使用DOCKER_AUTH_CONFIG变量替代

如果上述变量不生效,可生成Docker认证配置JSON传入:

  1. 生成base64编码的用户名密码:执行echo -n "用户名:密码" | base64得到编码字符串
  2. 创建认证JSON:
{
  "auths": {
    "nexus-server:5000": {
      "auth": "上述生成的base64字符串"
    }
  }
}
  1. 在GitLab CI/CD变量中添加DOCKER_AUTH_CONFIG,值为上述JSON内容(勾选Mask)

验证配置

重新触发CI流水线,容器扫描任务将携带认证信息访问Nexus仓库,完成镜像漏洞扫描。

内容的提问来源于stack exchange,提问作者uniwinux

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 20:43:19