이미지를 Amazon ECR로 푸시 할 수 없음-“기본 인증 자격 증명이 없으면”실패


173

도커 이미지를 Amazon ECR 레지스트리로 푸시하려고합니다. docker client Docker 버전 1.9.1, build을 사용하고 a34a1d5있습니다. aws ecr get-login --region us-east-1docker login creds를 얻는 데 사용 합니다. 그런 다음 다음과 같이 해당 cred에 성공적으로 로그인합니다.

docker login -u AWS -p XXXX -e none https://####.dkr.ecr.us-east-1.amazonaws.com
WARNING: login credentials saved in /Users/ar/.docker/config.json
Login Succeeded

그러나 이미지를 푸시하려고하면 다음 오류가 발생합니다.

$ docker push ####.dkr.ecr.us-east-1.amazonaws.com/image:latest
The push refers to a repository [####.dkr.ecr.us-east-1.amazonaws.com/image] (len: 1)
bcff5e7e3c7c: Preparing 
Post https://####.dkr.ecr.us-east-1.amazonaws.com/v2/image/blobs/uploads/: no basic auth credentials

AWS 사용자에게 올바른 권한이 있는지 확인했습니다. 또한 리포지토리에서 해당 사용자가 푸시 할 수 있도록했습니다. 문제가 아닌지 확인하기 위해 모든 사용자에게 모든 액세스 권한을 허용하도록 레지스트리를 설정했습니다. 아무것도 "no basic auth credentials"오류를 변경하지 않습니다 . 모든 트래픽이 암호화되어 있기 때문에 디버깅을 시작하는 방법을 모르겠습니다.

최신 정보

그래서 나는 내 문제의 근본 원인을 깨달았을 때 약간의 호머 심슨 도모 순간을 보냈습니다. 여러 AWS 계정에 액세스 할 수 있습니다. 심지어 사용 된 나는 비록 aws configure내가 AWS의 CLI가 실제로 환경 변수를 사용하던 설정 내 저장소를했다 계정에 대한 내 자격 증명을 설정 AWS_ACCESS_KEY_ID하고 AWS_SECRET_ACCESS_KEY. 그래서 내가 할 때 aws ecr get-login잘못된 계정에 대한 로그인을 반환했습니다. 제안 된 답변 중 일부를 시도하기 위해 방금 돌아갈 때까지 계좌 번호가 다르다는 것을 알지 못했습니다. 환경 변수를 제거하면 모든 것이 올바르게 작동합니다. 이야기의 좌우명은이 오류가 발생하면 로그인 한 저장소가 이미지에 적용 한 태그와 일치하는지 확인하십시오.


10
해당 업데이트를 굵게 강조하고 기울임 꼴로 표시해야합니다. 나도 그 호머 심슨 순간이 있었다. 감사합니다!
Mike

좁혀 주셔서 감사합니다! 당신은 내 하루를 문자 그대로 저장했습니다!
simonso

2
저장소가 존재하지 않을 때 동일한 오류가 발생합니다. 올바른 지역에 리포지토리를 만들 었는지 확인하십시오.
Ilia Sidorenko


여러 사용자 프로필을 처리하도록 aws cli를 설정할 수 있습니다. docs.aws.amazon.com/cli/latest/userguide/…
Peter Berg

답변:


111

당신이 $(aws ecr get-login --region us-east-1)그것을 실행 하면 모두 당신을 위해 수행됩니다


17
당신은 전설입니다. AWS 안내서에는 2 단계를 제외하고 "이전 단계에서 반환 된 docker login 명령 만 실행"을 제외하고 5 단계로 구성된 쉘 명령이 있습니다. 나 자신과 같은 많은 사람들이 쉘 명령에 집중하고 지시를 제대로 읽지 않았다고 생각합니다.
Tien Dinh

Time Machine-왜 $ ()에서 aws 명령을 래핑하면 로그인이 올바르게 성공합니까?
VtoCorleone

6
@VtoCorleone aws 명령은 표준 출력으로 docker 명령을 인쇄하기 때문입니다. 해당 문자열을 $ ()로 감싸면 셸에서 해석되며 docker login명령이 실행됩니다.
Otavio Macedo

2
$ (aws ecr get-login --region us-west-2) 알 수없는 속기 플래그 : 'e'in -e 'docker login --help'를 참조하십시오.
Ashish Karpe

23
"알 수없는 속기 플래그 : 'e'"가 표시되면 다음과 같이 --no-include-email 플래그를 사용하여 명령을 실행해야합니다. $ (aws ecr get-login --region us-east-1- no-include-email)
Trenton

57

제 경우에는 Docker for Windows의 버그와 Windows 자격 증명 관리자에 대한 지원이었습니다.

당신을 열고 항목을 ~/.docker/config.json제거하십시오 "credsStore": "wincred".

이로 인해 자격 증명이 config.json직접 작성 됩니다. 나중에 다시 로그인해야합니다.

GitHub 의 티켓 # 22910# 24968통해이 버그를 추적 할 수 있습니다.


고마워-Windows 10에서 작동했습니다. 구성에서 해당 속성을 제거하고 docker login 명령을 다시 실행 한 후 구성 파일이 자격 증명으로 업데이트되고 푸시가 작동했습니다.
Cameron

구성 파일을 찾을 수 없습니다. config.json 파일의 위치를 ​​알려주시겠습니까?
Ramashanker Tripathi

@RamashankerTripathi 위치가 정답입니다. 내가 어떻게 더 명확해질 수 있는지 잘 모르겠습니다.
Der Hochstapler

@OliverSalzburg 답장을 보내 주셔서 감사합니다. 실제로 내 Docker 설치 디렉토리에는 config.json 파일이 없습니다.
Ramashanker Tripathi

@RamashankerTripathi ~/.docker.docker홈 디렉토리에 있음을 의미 합니다. 시도%HOMEDRIVE%%HOMEPATH%\.docker
Der Hochstapler

50

프로필을 사용하는 경우로 전달 --profile=XXX하는 것을 잊지 마십시오 aws ecr get-login.


27

나는이 문제도 가지고 있었다. 나에게 일어난 일은 내가 달린 후에 나에게 돌아온 명령을 실행하는 것을 잊었다는 것입니다.

aws ecr get-login --region ap-southeast-2

이 명령은 큰 얼룩을 반환했으며 여기에는 docker login명령 이 포함되어 있습니다! 나는 몰랐다. 다음과 같이 반환해야합니다.

docker login -u AWS -p <your_token_which_is_massive> -e none <your_aws_url>

이 명령을 복사하여 붙여 넣은 다음 다음과 같은 docker push 명령을 실행하십시오.

docker push 8888888.blah.blah.ap-southwest-1.amazonaws.com/dockerfilename

1
그 blob 응답이 무엇인지 전혀 몰랐으므로 무시했습니다. ㅋ. 이것을 지적 해 주셔서 감사합니다!
duyn9uyen

14

권한을 열지 않아도 작동했을 것입니다. 개인 레지스트리 인증 문서를 참조하십시오 .

[편집 : 실제로, 두 번째 테스트를 수행 할 때 권한 문제도있었습니다. 잘못된 형식의 JSON으로 실패한 AWS ECR 프라이빗 리포지토리에 대한 Docker 푸시 참조 )]

그럼에도 불구하고 나는 같은 문제가 있었다. 왜 그런지 모르겠지만 문서에 설명 된 더 긴 인증 메커니즘을 get-authorization-token에 성공적으로 사용했습니다.

AWS CLI 및 Docker 버전 :

$ aws --version
aws-cli/1.9.17 Python/2.7.6 Linux/3.16.0-38-generic botocore/1.3.17
$ docker --version
Docker version 1.9.1, build a34a1d5

인증 토큰 ( '도커 비밀번호')을 가져옵니다.

aws ecr get-authorization-token --region us-east-1 --output text \
    --query authorizationData[].authorizationToken | base64 -d | cut -d: -f2

참고 : My ~ / .aws / config는 다른 기본 지역을 지정하므로 명시 적으로 설정해야했습니다 --region us-east-1.

대화 형으로 로그인 ( ############AWS 계정 ID로 변경 ) :

docker login -u AWS https://############.dkr.ecr.us-east-1.amazonaws.com/
password: <paste the very long password from above>
email: <I left this blank>

도커 이미지를 만들었다 고 가정하면 이미지를 푸시합니다 test.

docker tag test:latest ############.dkr.ecr.us-east-1.amazonaws.com/test:latest
docker push ############.dkr.ecr.us-east-1.amazonaws.com/test:latest
The push refers to a repository [910732017890.dkr.ecr.us-east-1.amazonaws.com/test] (len: 1)
d5122f58a2e1: Pushed 
7bddbca3b908: Pushed 
latest: digest: sha256:bc0b521fd398bd1a2ef58a289dcb910334608723fd570e7bddb36eacd0060363 size: 4378

아주 긴 암호를 어떻게 붙여 넣었습니까 ??? 광산은 여러 줄입니다. 복사 / 붙여 넣기 기능이 좋지 않은 Windows Docker Quickstart Terminal을 사용하고 있거나 알아낼 수 없습니다.
David

다른 궁금한 점이 있으면 공백을 포함한 모든 것을 표시하고 복사 한 다음 메모장에 붙여 넣어야했습니다. 거기에서 줄 바꿈을 제거하고 모든 것을 다시 복사 한 다음 터미널 명령 줄에 붙여 넣을 수 있습니다. 효과가있었습니다.
David

PowerShell을 사용하는 경우 속성> 옵션 탭으로 이동하여 "줄 바꿈 선택 사용"을 선택하십시오. 이렇게하면 수동으로 메모장에 복사
하거나

나는 거의 10 년 윈도우 머신 감동하지 않은,하지만 당신은 항상 파이프 표준 출력은 파일 수 : aws ecr get-authorization-token > config.json다음 복사 뜻에서 붙여 자주 사용하는 텍스트 편집기에서 엽니 다
pcting

13

시도해보십시오 :

eval $(aws ecr get-login --no-include-email | sed 's|https://||')

푸시하기 전에.


나는 이것을 얻었다no basic auth credentials Invalid IPv6 URL
Thanh Nguyen Van

12

최신 정보

AWS CLI 버전 2 aws ecr get-login는 더 이상 사용되지 않으며 올바른 방법은 다음과 같습니다 aws ecr get-login-password.

따라서 정답과 업데이트 된 답변은 다음과 같습니다. docker login -u AWS -p $(aws ecr get-login-password --region us-east-1) xxxxxxxx.dkr.ecr.us-east-1.amazonaws.com


내가 얻을unknown flag: --region
kittu을

11

누군가를 돕는다면 ...

내 문제는 --profile자격 증명 파일에서 적절한 프로필로 인증하기 위해 옵션 을 사용해야한다는 것 입니다.

다음으로 --region [region_name]"기본 인증 자격 증명 없음"오류가 발생 하는 명령 을 생략했습니다 .

나를위한 해결책은 다음과 같이 명령을 변경하는 것입니다.

aws ecr get-login

이에:

aws --profile [profile_name] ecr get-login --region [region_name]

예:

aws --profile foo ecr get-login --region us-east-1

누군가를 돕는 희망!


1
넌 나를 구했다! 나는 이와 같은 내 aws 프로파일을 사용하고 AWS_PROFILE=myprofile aws ecr get-login있었지만 작동하지 않지만 --profile인수 와 함께 aws 프로파일을 소개하는 것이 속임수입니다!
Colo Ghidini

8

Windows의 wincred credential manager에 알려진 버그가 있습니다. 생성 된 로그인 명령에서 'https : //'를 제거하면이 문제가 해결됩니다.

docker login -u AWS -p <password> <aws_account_id>.dkr.ecr.<region>.amazonaws.com

대신에

docker login -u AWS -p <password> https://<aws_account_id>.dkr.ecr.<region>.amazonaws.com

문제 해결 페이지 도 참조 하십시오 .


8

나는 같은 문제를 경험했다.

새로운 AWS 자격 증명 (액세스 키)을 생성하고 새로운 자격 증명으로 AWS CLI를 재구성하면 문제가 해결되었습니다.

이전에 aws ecr get-login --region us-east-1잘못된 EC 레지스트리 URL을 사용하여 생성 된 docker login 명령


나도 마찬가지였다. 감사!
Greendrake

이것은 내 문제였다. ~ / .aws / credentials에 관리중인 AWS와 다른 AWS CLI 자격 증명이 저장되었습니다. 새로운 자격 증명과 설정을 다시 만들었습니다.
Martin Algesten


5

다른 원인으로이 문제가 발생했습니다. AWS 계정과 관련이없는 레지스트리 (클라이언트의 ECR 레지스트리)로 푸시해야했습니다. 클라이언트는 본인의 IAM ID (예 :)를 본인으로 추가하여 레지스트리의 권한 탭에서 액세스 권한을 부여했습니다 arn:aws:iam::{AWS ACCT #}:user/{Username}. 일반적인 단계로 로그인을 시도했습니다.

$(aws ecr get-login --region us-west-2 --profile profilename)
docker push {Client AWS ACCT #}.dkr.ecr.us-west-1.amazonaws.com/imagename:latest

물론 어떤 결과가 발생했습니다 no basic auth credentials. 그것이 나오는 것에 따라 , aws ecr get-loginECR을에 사용자를 로그인 로그인을 관련 레지스트리에 대한 생각해 보면 의미가 있습니다. 해결책은 aws ecr get-login로그인 할 레지스트리 를 알려주 는 것입니다.

$(aws ecr get-login --region us-west-2 --profile profilename --registry-ids {Client AWS ACCT #})

그 후에는 docker push잘 작동합니다.


이것은 말이됩니다. 그러나 무엇을 전달해야 --profile합니까? 개인 계정이 있지만 회사 계정으로 푸시하려고합니다. 즉, 어디에서 찾을 수 있습니까profilename
치프 리안 Tomoiagă에게

1
@ CiprianTomoiagă 당신은 당신이 명명 된 프로파일을 사용하는 경우에만 포함해야합니다. docs.aws.amazon.com/cli/latest/userguide/…를
Sergio

5
  1. ECR 레지스트리를 먼저 작성했는지 확인하십시오.
    그런 다음 ECR 푸시 명령 지침에 따라 다음 명령을 잘라 붙여 넣습니다.

  2. eval $(aws ecr get-login --region us-east-1)
    여러 AWS 계정을 사용하는 경우 docker login 명령을 실행합니다 (Mac / Linux에서 eval은 잘라 내기 및 붙여 넣기를 건너 뜁니다) add --profile
    eval $(aws ecr get-login --region us-east-1 --profile your-profile)
  3. docker build -t image-name .
  4. docker tag image-name:latest ############.dkr.ecr.us-east-1.amazonaws.com/image-name:latest
  5. docker push ############.dkr.ecr.us-east-1.amazonaws.com/image-name:latest

오류가 발생 하면 모든 명령을 다시 실행하십시오! 사용하는 자격 증명 aws ecr get-login은 일시적이며 만료됩니다.


무엇을 넣어야 your-profile합니까?
Andy

기본 프로필을 사용하는 경우 그대로 둘 수 있습니다
Jason

기본 프로필을 사용하지 않는 방법을 알아 내려고했습니다. 그래도 알아서 추가 프로필을 ~/.aws/config~/.aws/credentials파일에 입력 할 수 있습니다 .
Andy

5

필자의 경우을 실행 한 후 aws ecr get-login --no-include-email --region *****해당 명령의 출력을 양식으로 docker login -u *** -p ************복사하여 프롬프트에 붙여 넣습니다. 추진은 계속되었다.


4

AWS 설명서에 다음 명령을 실행하라는 메시지가 표시됩니다 (ap-southeast-2 리전)

aws ecr get-login --region ap-southeast-2

이 문제에 부딪쳤을 때이 문서의 결과를 터미널에 입력하고 실행해야한다는 문서를 기반으로 분명하지 않았습니다.

나를 위해 일한 수정은 결과를 클립 보드에 복사하는 것이 었습니다.

aws ecr get-login --region ap-southeast-2 | pbcopy

결과를 명령 행에 붙여넣고 실행하십시오.


4

이 명령을 실행 한 후 :

(aws ecr get-login --no-include-email --region us-west-2)

출력에서 docker login 명령을 실행하십시오.

docker login -u AWS -p epJ....

도 커가 ECR에 로그인하는 방법입니다


3

이 오류는 일반적으로 ecr 로그인에 실패한 경우 발생합니다. Windows 시스템을 사용하고 있으며 관리자 모드에서 "Powershell"을 사용하여 ecr에 먼저 로그인했습니다.

Invoke-Expression $(aws ecr get-login --no-include-email)

"로그인 성공"이 출력됩니다.


감사합니다! 이것이 왜 도움이 되었습니까? 이미 saml2aws를 사용하여 로그인했습니다.
유입

2

나는 같은 문제에 직면했고 내가 잘못한 실수는 잘못된 저장소 경로를 사용하는 것이 었습니다

예 : docker push xxxxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/jenkins:latest

위의 경로에서 이것은 내가 실수를 저지른 곳 "dkr.ecr.us-east-1.amazonaws.com"입니다 "west". 대신에 . "을 (를) 사용하고있었습니다 east". 실수를 바로 잡으면 이미지를 성공적으로 푸시 할 수있었습니다.


2

aws-cli가 제공 한 docker 명령은 거의 없습니다 ...

docker login을 사용하면 docker는 server : key pair를 키 체인 또는 ~ / .docker / config.json 파일에 저장합니다.

https://7272727.dkr.ecr.us-east-1.amazonaws.com커가 7272727.dkr.ecr.us-east-1.amazonaws.comnot 이라는 서버를 찾기 때문에 푸시하는 동안 키 조회 아래에 키를 저장하면 실패합니다 https://7272727.dkr.ecr.us-east-1.amazonaws.com.

다음 명령을 사용하여 로그인하십시오.

eval $(aws ecr get-login --no-include-email --region us-east-1 --profile yourprofile | sed 's|https://||')

일단 명령을 실행하면 'Login Succeeded'메시지 가 표시되고
푸시 명령이 작동 하면 괜찮 습니다.


2

Docker 이미지를 ECR로 푸시하는 매우 간단한 방법이 있습니다 : Amazon ECR Docker Credential Helper . 제공된 안내서에 따라 설치 ~/.docker/config.json하고 다음과 같이 업데이트하십시오 .

{
    "credsStore": "ecr-login"
}

그리고 당신은없이 이미지를 밀거나 당길 수 있습니다 docker login.


이 기사의 지침을 따른 후에도 동일한 오류가 발생했습니다.
ryechus

1

OSX 에서이 문제가 발생했습니다. Oliver Salzburg의 답변을보고 ~ / .docker / config.json을 확인했습니다. 내가 가지고있는 다른 AWS 계정에서 여러 권한 자격 증명이 내부에있었습니다. 파일을 삭제하고 get-login을 다시 실행 한 후 작동했습니다.


1

의 올바른 리전을 aws ecr get-login사용해야합니다. 리전은 리포지토리가 생성 된 리전과 일치해야합니다.


1

내 문제에는 여러 AWS 자격 증명이 있습니다. 기본 및 개발자. dev로 배포하려고 시도한 이후로 작동했습니다.

$(aws ecr get-login --no-include-email --region eu-west-1 --profile dev | sed 's|https://||')

1

FWIW, Debian 9, Docker 버전 18.06.1-ce, 빌드 e68fc7a :

$(aws ecr get-login | sed 's| -e none | |g')


1

다중 프로파일을 사용하고 기본 프로파일이 아닌 프로파일에 로그인해야하는 경우 다음 명령으로 로그인해야합니다.

$(AWS_PROFILE=<YOUR PROFILE> aws ecr get-login --no-include-email --region eu-west-1)

1

다음 명령이 나를 위해 작동합니다.

sudo $(aws ecr get-login --region us-east-1 --no-include-email)

그런 다음이 명령을 실행합니다.

sudo docker tag e9ae3c220b23(image_id) aws_account_id.dkr.ecr.region.amazonaws.com/my-web-app

sudo docker push aws_account_id.dkr.ecr.region.amazonaws.com/my-web-app

0

또한 오늘이 문제가 발생하여이 게시물에서 언급 한 모든 내용을 시도했습니다 (AWS 자격 증명 생성 제외).

마침내 Docker를 업그레이드하여 문제를 해결 한 다음 푸시가 작동했습니다.

Docker 1.10.x에서 문제가 발생했으며 Docker 1.11.x로 해결되었습니다.

도움이 되었기를 바랍니다


0

CI / CD 목적으로 AWS 계정을 격리하고 여러 AWS 계정간에 하나의 ECR 리포지토리를 공유하는 경우 ~/.docker/config.json 수동으로 있습니다.

이 설정이 있다고 가정 해 봅시다.

  1. ECR은 AWS 계정 ID가 소유합니다 00000000000000
  2. CI 서버는 AWS 계정 ID가 소유합니다 99999999999999

aws ecr get-login --region us-west-2 | bashCI 서버 내에서 전화하면 docker는에서 임시 자격 증명을 생성 ~/.docker/config.json합니다.

{
  "auths": {
    "https://99999999999999.dkr.ecr.us-west-2.amazonaws.com": {
      "auth": "long-token.."
    }
  }
}

그러나 ECR의 계정을 가리 키려면 호스트 이름을 변경해야합니다.

{
  "auths": {
    "https://00000000000000.dkr.ecr.us-west-2.amazonaws.com": {
      "auth": "long-token.."
    }
  }
}

이 상황은 ECR 액세스를 허용하기 위해 IAM 사용자 / 정책을 구성하는 방법에 의존합니다.



0
aws ecr get-login --region us-west-1 --no-include-email

이 명령은 올바른 로그인 명령을 제공합니다. "--no-include-email"을 사용하지 않으면 다른 오류가 발생합니다. 위 명령의 출력은이 docker login -u AWS -p ********************** very big ******과 같습니다. 그것을 복사하고 실행하십시오. 이제 "로그인 성공"이 표시됩니다. 이제 이미지를 ECR로 푸시 할 수 있습니다.

AMI 규칙에 로그인하려는 사용자에 대한 권한이 있는지 확인하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.