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

Jenkins使用dockerfile类型agent拉取ECR镜像报no basic auth credentials问题

问题原因

Jenkins 两种 Docker Agent 的镜像拉取认证逻辑存在差异:

  • 使用 docker { image } 配置时,Jenkins 会自动调用全局/项目中配置的容器镜像仓库凭证完成拉取前的认证,所以可以正常拉取 ECR 私有镜像
  • 使用 dockerfile 配置时,FROM 指令的镜像拉取动作直接由 Docker daemon 执行,默认不会走 Jenkins 预配置的凭证链,因此会提示无认证权限
解决方案
  • 方案1:在 dockerfile 配置块中显式指定仓库凭证
    提前在 Jenkins 凭据管理中上传 ECR 认证凭证,修改 Pipeline 配置如下即可:

    stage ('Build') {
        agent {
          dockerfile {
            filename '.ci/Dockerfile'
            registryUrl '<my registry>.ecr.eu-west-2.amazonaws.com'
            registryCredentialsId '<你的ECR凭证在Jenkins中的ID>'
            // 其余原有配置保持不变
         ...
    

    配置后 Jenkins 会在构建 Dockerfile 前自动完成对应 ECR 仓库的登录,Docker daemon 即可正常拉取基础镜像。

  • 方案2:配置 Docker ECR 凭证助手实现自动认证
    在 Jenkins 构建 Agent 所在节点完成以下配置,后续所有 Docker 操作都可以自动获取 ECR 认证,无需额外调整 Pipeline:

    1. 安装 amazon-ecr-credential-helper 工具
    2. 修改 Jenkins 运行用户目录下的 .docker/config.json 文件,添加如下配置:
    {
        "credsStore": "ecr-login"
    }
    
    1. 确保 Jenkins 运行用户持有可拉取 ECR 镜像的 AWS 权限(可通过实例角色、~/.aws/credentials 配置等方式实现)
  • 方案3:在构建前手动执行 ECR 登录
    在执行 dockerfile 构建阶段之前,新增一步登录 ECR 的操作,将认证信息写入 Docker 配置:

    sh 'aws ecr get-login-password --region eu-west-2 | docker login --username AWS --password-stdin <my registry>.ecr.eu-west-2.amazonaws.com'
    

    执行完成后再运行使用 dockerfile Agent 的阶段即可正常拉取镜像。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 15:54:01