Amazon ECR 的拉取访问被拒绝,仓库不存在或可能需要进行“docker login”。

13
  1. 我在Amazon ECR存储库中有一个名为“workshop”的图像
  2. 我有一个Dockerfile来获取那个图像
  3. CodeBuild应该从Dockerfile构建新的镜像

问题:

拉取访问被拒绝xxx.xxxxxxxx.dkr.ecr.eu-central-1.amazonaws.com/workshop,仓库不存在或可能需要'docker login'

在我的buildspec文件中,我尝试使用docker登录,但没有任何变化。

 phases:
  pre_build:
  commands:
   - echo Logging in to Amazon ECR...
   - $(aws ecr get-login --no-include-email --region $AWS_DEFAULT_REGION)
   - aws ecr get-login-password --region eu-central-1 | docker login --username AWS --password-stdin 
     xxxxxxxxx.dkr.ecr.eu-central-1.amazonaws.com
   - CODEBUILD_RESOLVED_SOURCE_VERSION="${CODEBUILD_RESOLVED_SOURCE_VERSION:-$IMAGE_TAG}"
   - IMAGE_TAG=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
Dockerfile看起来像这样:

Dockerfile looks like this:

FROM xxxxxxxxxxx.dkr.ecr.eu-central-1.amazonaws.com/workshop:latest

CMD ["echo", "Hallo!"]

RUN code-server

可能会导致问题的原因是什么?


你在CB项目中的角色是什么?它是否有使用ECR的权限? - Marcin
CB是什么意思?我给我的ECR仓库设置了策略,如Allow:ecr:*,所以我可以从ECR拉取镜像,但它没有起作用。@Marcin - vasil001
CB - CodeBuild。您的CB需要访问ECR的权限。您是否为其设置了角色? - Marcin
@Marcin 我想我还没有,我会尝试一下。 - vasil001
今天遇到了这个问题,并通过以下步骤解决:1)在ECR注册表中添加权限策略,允许主AWS帐户ID使用ecr:*,然后2)将服务角色添加到CodeBuild中,以允许ecr:*用于resources: *,并且3)在我的buildspec.yml文件的install阶段中添加了aws ecr get-login-password --region region | docker login -u AWS --password-stdin xxx.dkr.ecr.eu-west-2.amazonaws.com/image:tag - Krizza
2个回答

5

尝试更新您的aws-cli并使用最新版本,因为get-login已被弃用。

新命令如下:

aws ecr get-login-password \
    --region <region> \
| docker login \
    --username AWS \
    --password-stdin <aws_account_id>.dkr.ecr.<region>.amazonaws.com

参考资料:


1
谢谢您的回答。不幸的是问题仍然存在。我还尝试了给我的账户一个策略,如下所示:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ecr:*", "Resource": "arn:aws:ecr:eu-central-1:xxxxxxxxxxxxx:repository/workshop" } ] } 但它也没有起作用... - vasil001

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接