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

已安装在EC2的Amazon ECR credential helper能否在Docker容器内使用

报错原因

你收到的no basic auth credentials报错是因为GitLab Runner的Docker执行器拉取私有ECR镜像的动作发生在job容器启动之前,和job容器内部的环境无关。你之前的配置是在job容器内手动执行docker login再拉镜像,而新配置是让Runner直接拉取镜像作为job的运行环境,所以需要给Runner本身配置ECR访问权限,完全不需要在业务镜像中安装任何凭证工具。

可行方案(无需修改业务镜像)

方案1:挂载宿主机凭证配置到Runner容器

你的GitLab Runner本身运行在Docker容器中,只需要在启动Runner容器时挂载两个路径即可复用宿主机已安装的ECR凭证助手能力:

  • 把宿主机的ECR凭证助手二进制 /usr/local/bin/docker-credential-ecr-login 挂载到Runner容器的同路径
  • 把宿主机的Docker配置文件 ~/.docker/config.json(已配置credsStore: "ecr-login")挂载到Runner容器的 /root/.docker/config.json 路径

配置完成后重启Runner容器即可,后续Runner拉取ECR镜像时会自动调用凭证助手完成认证。

方案2:配置GitLab DOCKER_AUTH_CONFIG全局变量

如果你不想修改Runner的启动配置,可以直接在项目的CI/CD变量中添加名为DOCKER_AUTH_CONFIG的变量,值为如下格式的JSON:

{
  "auths": {
    "<你的ECR仓库地址>": {
      "auth": "<AWS:ECR登录凭证的Base64编码值>"
    }
  }
}

凭证可以通过命令 aws ecr get-login-password | awk '{print "AWS:"$0}' | base64 -w 0 生成,有效期为12小时,你可以在EC2上配置定时任务每10小时自动更新该变量即可。

方案3:绑定IAM角色(长期稳定方案)

首先给运行GitLab Runner的EC2实例附加包含ecr:GetAuthorizationToken、ecr:BatchGetImage、ecr:GetDownloadUrlForLayer权限的IAM策略,再按照方案1的方式挂载凭证助手和Docker配置文件,最后修改Runner的/etc/gitlab-runner/config.toml配置:

[[runners]]
  environment = ["DOCKER_CONFIG=/root/.docker"]
  [runners.docker]
    pull_policy = ["if-not-present"]

配置完成后无需手动更新凭证,Runner会自动通过EC2的IAM角色获取ECR访问权限。

以上三种方案配置完成后,你期望的第二种CI配置即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:27:06