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

使用AWS CodePipeline推送Docker镜像到ECR时提示‘no basic auth credentials’

AWS CodeBuild推送Docker镜像到ECR时报错:no basic auth credentials

问题详情

我使用AWS CodePipeline搭建了从GitHub拉取代码、构建Docker镜像后推送到ECR的流水线。尝试通过aws ecr get-login-password命令完成ECR登录,但在post_build阶段执行docker push时,返回错误提示:no basic auth credentials。

我的buildspec.yml内容如下:

phases:
  install:
    runtime-versions:
      nodejs: 16
  pre_build:
    commands:
      - echo Installing Dependencies
      - npm install
      - docker logout
      - aws ecr get-login-password || docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com
  build:
    commands:
      - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG .
      - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
  post_build:
    commands:
      - echo Pushing the docker image
      - docker -v
      - aws --version
      - docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
      - printf '[{"name":"%s","imageUrl":"%s"}]' $CONTAINER_NAME $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG > imagedefinitions.json
artifacts:
  files: imagedefinitions.json

报错截图:
AWS CodeBuild错误截图

解决方案

1. 修正ECR登录命令逻辑

问题出在pre_build阶段的登录命令:你用了||逻辑或运算符,这只会在aws ecr get-login-password执行失败时才运行docker login,但正确的做法是将aws ecr get-login-password的输出通过管道传递给docker login,用来提供登录密码。

修正后的登录命令:

aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com

2. 完整修正后的buildspec.yml

phases:
  install:
    runtime-versions:
      nodejs: 16
  pre_build:
    commands:
      - echo Installing Dependencies
      - npm install
      - docker logout
      - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com
  build:
    commands:
      - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG .
      - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
  post_build:
    commands:
      - echo Pushing the docker image
      - docker -v
      - aws --version
      - docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
      - printf '[{"name":"%s","imageUrl":"%s"}]' $CONTAINER_NAME $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG > imagedefinitions.json
artifacts:
  files: imagedefinitions.json

(注:同时修正了printf里的转义引号,避免生成无效的JSON)

3. 额外检查项

  • 确认CodeBuild服务角色已授予ECR相关权限:至少包含ecr:GetAuthorizationToken、ecr:PutImage等推送镜像所需的权限,可直接附加AmazonEC2ContainerRegistryPowerUser托管策略。
  • 验证CodeBuild项目中已正确配置$AWS_ACCOUNT_ID、$AWS_DEFAULT_REGION、$IMAGE_REPO_NAME、$IMAGE_TAG这些环境变量,确保变量值无误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:05:15