5
votes
  1. I have an image in an Amazon ECR Repository called workshop
  2. I have a Dockerfile to pull that image
  3. CodeBuild should build the new image from Dockerfile

Problem:

pull access denied for xxxxxxxxxxx.dkr.ecr.eu-central-1.amazonaws.com/workshop, repository does not exist or may require 'docker login'

In my buildspec file, I've tried to login with docker, but nothing changes.

 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 looks like this:

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

CMD ["echo", "Hallo!"]

RUN code-server

What may cause the Problem?

1
What is the role on your CB project? Does it have permissions to use ECR? - Marcin
What do you mean by CB? I gave my ECR Repository the policy like Allow: ecr:*, so I can pull the images from ECR but it didn't work. @Marcin - vasil001
CB - codebuild. You CB needs permissions to access ECR. Have you set it role for that? - Marcin
@Marcin I think I haven't, I will give it a try - vasil001
Encountered this issue today and resolved it by: 1) adding permission policy in ECR registry to allow ecr:* for Principal AWS account id and then 2) adding service role to CodeBuild to allow ecr:* for resources: * and 3) added aws ecr get-login-password --region region | docker login -u AWS --password-stdin xxx.dkr.ecr.eu-west-2.amazonaws.com/image:tag to the install phase of my buildspec.yml file - Krizza

1 Answers

1
votes

Try to update your aws-cli and use latest version, because get-login is deprecated.

New command is like this:

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

References: