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

执行AWS CodeBuild的build.yml时遇Docker登录403错误求助

问题

执行AWS CodeBuild的build.yml时触发Docker登录失败,错误信息如下:

Error response from daemon: login attempt to ***/v2/ failed with status: 403 Forbidden
[Container] 2024/08/03 09:13:53.450561 Command did not exit successfully echo "$DOCKER_REGISTRY_PASSWORD" | docker login -u "$DOCKER_REGISTRY_USERNAME" --password-stdin "$DOCKER_REGISTRY_URL" exit status 1
[Container] 2024/08/03 09:13:53.453890 Phase complete: BUILD State: FAILED
[Container] 2024/08/03 09:13:53.453909 Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: echo "$DOCKER_REGISTRY_PASSWORD" | docker login -u "$DOCKER_REGISTRY_USERNAME" --password-stdin "$DOCKER_REGISTRY_URL". Reason: exit status 1

已检查Docker凭证和build.yml语法,未发现问题,需解决该故障。

排查与解决方案
  • 验证CodeBuild服务角色权限:确保CodeBuild使用的服务角色拥有访问目标Docker Registry的权限。如果是AWS ECR,需附加AmazonEC2ContainerRegistryPowerUser或自定义权限策略,包含ecr:GetAuthorizationToken、ecr:BatchCheckLayerAvailability、ecr:GetDownloadUrlForLayer、ecr:BatchGetImage、ecr:InitiateLayerUpload、ecr:UploadLayerPart、ecr:CompleteLayerUpload、ecr:PutImage这些必要权限。
  • 检查凭证传递有效性:确认CodeBuild环境变量DOCKER_REGISTRY_USERNAME和DOCKER_REGISTRY_PASSWORD已正确配置为安全变量,避免明文泄露。可在build.yml中添加临时调试步骤,输出变量长度(而非明文)验证传递状态:
    echo "Username length: ${#DOCKER_REGISTRY_USERNAME}"
    echo "Password length: ${#DOCKER_REGISTRY_PASSWORD}"
    
  • 核对Registry URL格式:如果是AWS ECR,Registry URL应为123456789012.dkr.ecr.region.amazonaws.com格式,确保无多余后缀(如/v2/),也不要遗漏区域信息。
  • 检查Registry访问策略:私有Registry需确认访问策略允许CodeBuild服务角色或凭证对应账号执行登录、推送/拉取操作。比如ECR的资源策略需明确授权对应主体。
  • 验证凭证时效性:部分Registry的凭证(如ECR临时token)有有效期,若使用手动生成的token,确认未过期;自动获取的凭证需检查生成逻辑是否正常。
  • 本地登录测试:在本地环境使用相同凭证和Registry URL执行docker login命令,验证是否能成功登录,排除Registry本身的故障。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 03:27:10