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

도커 이미지를 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잘못된 계정에 대한 로그인을 반환했습니다. 제안 된 답변 중 일부를 시도하기 위해 방금 돌아갈 때까지 계좌 번호가 다르다는 것을 알지 못했습니다. 환경 변수를 제거하면 모든 것이 올바르게 작동합니다. 이야기의 좌우명은이 오류가 발생하면 로그인 한 저장소가 이미지에 적용 한 태그와 일치하는지 확인하십시오.



답변

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


답변

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

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

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

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


답변

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


답변

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

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


답변

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

[편집 : 실제로, 두 번째 테스트를 수행 할 때 권한 문제도있었습니다. 잘못된 형식의 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


답변

시도해보십시오 :

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

푸시하기 전에.


답변

최신 정보

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