본문 바로가기

infra(terraform, aws, git)

(에러)ecr에 docker image push할 때 나오는 에러 2가지 해결.

ECR에 docker image를 push할 때 나오는 에러가 있다.

일단 첫번째로 no basic auth credentials 이다.

다음과 같이 ecr repository에 docker push를 하려고 하는데 no basic auth credentials가 뜬다. ecr에 image를 push하려고 할때 권한이 없어서 문제인건가? 그렇다면 ecr repository에 접근할 권한이 없는건가? 아니면 push할 권한이 없는걸까? 사실 push 할 권한같은 건 없다. 애초에 aws에서 ecr authorization을 인증할 때 token을 발행하는데 이러한 token이 12시간이 제한이고, 이러한 token으로만 권한을 부여하기 때문이다.

 

그렇다면 접근할 권한이 없는지 확인해야한다.

 

첫번째로 ~/.docker/config.json파일을 보자.

그렇다면 ecr에 대한 auth 정책이 있을텐데 여러개일 수도 있다. token도 발행되어있을텐데, 자신이 push하고자 하는 ecr repository가 있는지 확인하자.

없다면 아래의 명령을 통해 token을 받아주면 된다.

aws ecr get-login-password \
    --region ap-northeast-2 \
    --profile default  \
    | docker login \
    --username AWS \
    --password-stdin \
    [account id].dkr.ecr.ap-northeast-2.amazonaws.com

적절히 parameter는 바꿔주고, 위의 명령어를 실행했다면, ecr auth가 되고, token이 발행되어졌다.

그리고 다시 push해보자.

되는 경우는 두번째 에러가 안생긴거고, 여기서 실수하는 두번째 에러가 있다.

이런식으로 retrying만 계속되다가 EOF가 뜬다. 계속 시도를 했는데 실패했다는 것이다.

무엇이 문제일까 봤더니, 위의 명령어를 실행할 때 AWS KEY값이 제대로 되어있는지 확인을 해야한다.

즉, ~/.aws/credentials를 열어보면 aws key값이 있는데, 이러한 값들이 해당 repository에 대한 권한이 없으면 저렇게 계속 시도가다가 에러가 나버린다. 그렇다면 ~/.aws/credentials의 키값들을 해당 repository에 접근권한이 있는 키들로 바꿔주고 실행해보자.

다음과 같이 성공적으로 완료했다. 위의 already exists는 그 전에 한번 실행하다가 중지시켜서 그런것이다.