代码构建:拉取访问被拒绝

Codebuild: pull access denied

我为一个 python 项目设置了一个代码构建,它的依赖项需要很长时间才能构建。所以我为 docker 层启用了工件缓存。这工作正常但只持续很短一段时间,并且将使相隔 15 分钟的构建缓存无效。我想到的另一个解决方案是在 pre_build 步骤上拉取 docker 图像,但它似乎不起作用。我的构建规范:

version: 0.2

env:
  secrets-manager:
    DOCKERHUB_ID: arn:aws:secretsmanager:■■■■■■:■■■■■■:■■■■■■:■■■■■■/■■■■■■:■■■■■■
    DOCKERHUB_TOKEN: arn:aws:secretsmanager:■■■■■■:■■■■■■:■■■■■■:■■■■■■/■■■■■■:■■■■■■
phases:
  pre_build:
    commands:
      - echo Logging in to Amazon ECR...
      - 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
      - echo Logging in to Docker Hub...
      - echo $DOCKERHUB_TOKEN | docker login -u $DOCKERHUB_ID --password-stdin
      - docker pull $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME || true
  build:
    commands:
      - echo Build started on `date`
      - echo Building the Docker image on branch $CODEBUILD_WEBHOOK_HEAD_REF ...
      - touch .env
      - echo $ENV_PREFIX$IMAGE_REPO_NAME:$IMAGE_TAG
      - docker build --cache-from $IMAGE_REPO_NAME:$IMAGE_TAG --build-arg BUILD_SECRET_KEY=$SECRET_KEY -t $IMAGE_REPO_NAME:$IMAGE_TAG -f docker/django/Dockerfile .
      - docker tag $ENV_PREFIX$IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
  post_build:
    commands:
      - echo Build completed on `date`
      - echo Pushing the Docker image...
      - docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
      - IMAGE_DIFINITION_APP="{\"name\":\"${CONTAINER_NAME}\",\"imageUri\":\"${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/${IMAGE_REPO_NAME}:${IMAGE_TAG}\"}"
      - echo "[${IMAGE_DIFINITION_APP}]" > imagedefinitions.json
artifacts:
  files: imagedefinitions.json

我可以在 pre_build 上成功拉取图像,但是在 build 这一步它给了我这个错误

#7 ERROR: pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed

我正在使用的角色已将所有权限授予 ECR。我还缺少其他权限吗?

非常感谢任何帮助。

看这里: ECR polices

可能是您没有在ECR策略中添加权限。

我花了一段时间才明白出了什么问题,而不是:

 - docker build --cache-from $IMAGE_REPO_NAME:$IMAGE_TAG --build-arg BUILD_SECRET_KEY=$SECRET_KEY -t $IMAGE_REPO_NAME:$IMAGE_TAG -f docker/django/Dockerfile .

注册表名称应添加在存储库名称之前,否则它将搜索 docker hub 而不是 ecr:

 - docker build --cache-from $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME --build-arg BUILD_SECRET_KEY=$SECRET_KEY -t $IMAGE_REPO_NAME:$IMAGE_TAG -f docker/django/Dockerfile .