AWS ECR에 대한 도커 푸시가 즉시 중단되고 시간 초과됨
첫 번째 도커 이미지를 ECR에 푸시하려고 합니다.저는 AWS에서 제공하는 단계를 따랐고, 즉시 타임아웃되는 최종 푸시까지 일이 순조롭게 진행되는 것 같습니다.특히, 도커에 내 awsecc 자격 증명을 전달하고 "로그인 성공" 메시지를 받습니다.그런 다음 작동하는 이미지에 태그를 붙입니다.ecrepo에 푸시하면 다음과 같은 오류 메시지가 표시되지 않습니다.
The push refers to repository [xxxxxxxxxxx.dkr.ecr.ca-central-1.amazonaws.com/reponame]
714c1b96dd83: Retrying in 1 second
d2cdc77dd068: Retrying in 1 second
30aad807caf5: Retrying in 1 second
0559774c4ea2: Retrying in 1 second
285b8616682f: Retrying in 1 second
4aeea0ec2b15: Waiting
1b1312f842d8: Waiting
c310009e0ef3: Waiting
a48777e566d3: Waiting
2a0c9f28029a: Waiting
EOF
여러 번 시도한 다음 메시지 없이 종료됩니다.뭐가 잘못됐는지 알아요?
저는 제 문제를 알아냈습니다.올바른 자격 증명을 사용하지 않았습니다.개인 AWS 계정을 기본 자격 증명으로 사용했으며 자격 증명에 작업 프로필을 추가해야 했습니다.
프로파일이 개인 아래와 할 수 이 AWS 프로파일을 하면).aws configure --profile someprofile
전이),
aws ecr get-login-password --region us-east-1 --profile someprofile | docker login ....
푸시하기 전에 ECR repo를 만드는 것을 잊어버린 경우에도 동일한 동작이 표시됩니다.
CloudTrail을 사용하여 무엇이 잘못되었는지 파악합니다.
리포지토리 이름이 이미지 이름과 동일한지 확인합니다.image:latest 756839881602.dkr.ecr.us-east-1.amazonaws.com/image:latest
내 은 이 경 저 이 은 름 소 장 내 우 이▁inimage
제 은 그고제이이름은지미입니다.image
뿐만 아니라.이것은 저에게 효과가 있었습니다.
또한 사용자에 대해 올바른 정책(예: Amazon EC2ContainerRegistry)을 구성했는지 확인합니다.전체 액세스.
하지 않았습니다(를 들어, 저는 했습니다).my-app/backend:latest
오직 러나오직그그▁the그.my-app/cms
저장소가 있음).따라서 저장소가 올바른 영역의 AWS ECR 콘솔에 있는지 확인합니다.AWS CLI(EOF)에서 반환된 오류는 전혀 도움이 되지 않았습니다.
permissionsaws 파일을 합니다.▁▁additionAmazonEC2ContainerRegistryFullAccess
권한. 아래의 작업은 올바른 리소스에 대해 허용되어야 합니다. 특히확을 확인하십시오."arn:aws:ecr:${REGION}:${ACCOUNT_ID}:repository/{$REGISTRY_NAME}"
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecr:BatchGetImage",
"ecr:BatchCheckLayerAvailability",
"ecr:CompleteLayerUpload",
"ecr:DescribeImages",
"ecr:DescribeRepositories",
"ecr:GetDownloadUrlForLayer",
"ecr:InitiateLayerUpload",
"ecr:ListImages",
"ecr:PutImage",
"ecr:UploadLayerPart"
],
"Resource": "arn:aws:ecr:${REGION}:${ACCOUNT_ID}:repository/{$REGISTRY_NAME}"
},
{
"Effect": "Allow",
"Action": "ecr:GetAuthorizationToken",
"Resource": "*"
}
]
}
AWS에 성공적으로 인증되었으며 ECR에 읽고 쓸 수 있는 권한이 있다고 가정하고 저장소가 있는지 확인합니다.
aws ecr describe-repositories --repository-name reponame
되면 오류가한경우생발우경▁if▁you한▁an▁error.RepositoryNotFoundException
.
aws ecr create-repository --repository-name reponame
그 후에, 다시 밀어보세요, 괜찮을 거예요!
제 경우에는 MFA(Multi-Factor-Authentication)와 관련이 있었습니다.세션 토큰을 만들어야 했습니다.도커 로그인에 성공한 것 같았지만 푸시가 작동하지 않습니다.
get_mfa_credentials.py 스크립트는 모든 작업을 수행하며 로그인하는 데 사용되는 aws 프로파일 "mfa"를 생성합니다.
실행 후 다음을 사용하여 로그인할 수 있습니다.
aws ecr get-login-password --region <YOUR_REGION> --profile mfa | docker login --username AWS --password-stdin <Your_REPO>
누가 썼는지는 모르겠지만, 저는 이 사람에게 매우 감사합니다.
그리고 도움이 되지 않는 나쁜 도구들에 대한 AWS의 감사합니다.
이 문제에 직면한 다른 사람들을 위해 추가해야 합니다.IAM으로 이동하여 권한을 입력했는지 확인합니다.그것을 알아내기 전에 얼마나 오래 낭비했는지 말하고 싶지 않습니다.
to@zac의 @zac 답을돕 해위편: 해야 할 은 첨부야하다입니다.AmazonEC2ContainerRegistryFullAccess
그리고.AWSAppRunnerServicePolicyForECRAccess
올바른 프로필을 사용하고 있고 리포지토리가 있는지 확인합니다.
하여 로그인하는 : 로로는명령하인:aws ecr get-login-password --region <region> --profile=<profile-name> | docker login --username AWS --password-stdin <aws-account-id>.dkr.ecr.eu-west-1.amazonaws.com
: 보서가없보작성는명령하:aws ecr describe-repositories --repository-names ${REPO_NAME} || aws ecr create-repository --repository-name ${REPO_NAME}
(소스)
위의 솔루션을 시도했지만 작동하지 않은 사용자의 경우 푸시 중인 이미지 이름이 리포지토리 이름과 동일한지 확인하십시오.
레지스트리에 로그인할 수도 있지만 이미지 푸시가 시간 초과됩니다.
저를 위한 해결책은 다음과 같습니다.AmazonEC2ContainerRegistryFullAccess
내 IAM 사용자에게.
을 내 IAM 에 IAM 사용자 계정에 추가할 수 .docker push
ECS 레지스트리로 가는 것이 좋습니다.
먼저 ECR에서 도커 리포지토리를 만든 다음 ECR로 밀어 넣었을 때 문제가 해결되었습니다.도커 푸시 명령을 실행하기 전에 도커 리포지토리를 만들어야 합니다.
아직 문제가 해결되지 않은 경우.저는 이 짧은 비디오 https://www.youtube.com/watch?v=89ZeXaZEf80&ab_channel=IdenticalCloud 를 보는 것을 강력히 추천합니다.
다음은 문제를 해결하기 위해 수행한 단계입니다(비디오를 보지 않으려는 경우).
- "액세스 키"가 선택된 새 IAM 사용자 생성
- 권한에서 "기존 정책 직접 첨부"를 누른 후 "Amazon EC2 ContainerRegistry"를 선택합니다.전체 액세스"
- CSV 파일 다운로드
- 터미널에서 "AWS 구성"을 실행하고 CSV 파일에서 자격 증명을 전달합니다.
- ECR을 만든 위치로 위치를 설정합니다(내 위치는 us-east-1).
- ECR로 이동하여 단계에 따라 이미지를 푸시합니다.
클라우드 추적 이벤트 로그를 확인하십시오. 여기서 모든 api 문제가 명확하게 강조됩니다.
나의 경우에는 그것은 내가 가지고 있었기 때문입니다.-
로그에 오류를 했습니다.
"The repository with name 'myimage-nginx' does not exist in the registry with id '516583196897'
참고하십시오.-
이미지 이름으로.
이미지 이름을 수정하여 제거-
저를 위해 그 문제를 해결했습니다.
명령
docker tag nginx:latest 516583196897.dkr.ecr.ap-south-1.amazonaws.com/myimage:latest
docker push 516583196897.dkr.ecr.ap-south-1.amazonaws.com/myimage:latest
저는 다음과 같이 태그 이름을 잘못 구성했습니다.
$ docker tag <image_name>:latest xxxxxxxxxxx.dkr.ecr.ca-central-1.amazonaws.com/reponame/<additional_string>:latest
$ docker push xxxxxxxxxxx.dkr.ecr.ca-central-1.amazonaws.com/reponame/<additional_string>:latest
...timeout...
그리고 <additional_string>을 삭제해야 한다는 것을 알게 되었습니다.
$ docker tag <image_name>:latest xxxxxx.amazonaws.com/reponame:latest
$ docker push xxxxxx.amazonaws.com/reponame:latest
...success!...
저는 스택을 삭제하고 다시 배포해야 했습니다.그런 다음 도커 이미지를 ECR에 푸시할 수 있었습니다.
저 같은 경우에는 제가 레핀을 만들고 있었습니다.us-east-2
그리고 밀어내기를 시도하는 것.us-east-1
그래서 도커는 그것을 찾을 수 없었습니다.
가정된 aws 역할에 이미지를 AWS ECR에 푸시할 수 있는 기능이 있는지 확인합니다.가장 쉬운 방법은 다음 명령을 통해 역할을 확인하는 것입니다.
aws sts get-caller-identity --profile=saml
이 설명서를 따르다가 이 오류를 발견했습니다.문제를 해결한 것은 계정 이름 대신 리포지토리 ID를 사용한 것입니다.
aws ecs create-repository
레포를 작성하고, 반환repositoryUri
그다음에.docker login
,docker tag
그리고.docker push
사용자 URL 대신 해당 리포지토리 URL을 사용하여 수행해야 합니다.
저는 이 문제를 겪었습니다.sam deploy
sam delete --stack-name ...
sam deploy --guided
나를 위해 일했습니다.
해결책을 찾지 못했나요?
아마도 당신은 내가 가지고 있던 유스케이스에 빠져 있는 것 같습니다.
식별자:
동일한 터미널에서 서로 다른 AWS 계정으로 작업하고 있습니다.
AWS 계정 사이를 이동할 때 사용하는
export AWS_PROFILE
터미널 수준에서(또는 일부 도구 또는 명령을 통해) 프로파일을 내보냅니다.당신은 때로는 밀 수 있고 때로는 밀 수 없습니다.
사용하여 로그인할 수 있습니다.
aws ecr get-login-password
.
원인이 무엇이었습니까?
AWS 계정 간에 전환할 때 각 계정에 대해 유효한 세션 토큰이 있었지만 가끔 잊어버렸습니다.export AWS_PROFILE
관련 프로필을 지원합니다.
내가 찾은 가장 쉬운 방법은.콘솔로 이동하여 리포지토리를 만듭니다.생성된 보고서를 클릭하여 다음을 확인합니다.view push commands
단추를 채우다클릭하면 빌드에 필요한 모든 명령이 나열되고 이미지가 레포에 푸시됩니다.변경할 필요가 없습니다.
언급URL : https://stackoverflow.com/questions/70452836/docker-push-to-aws-ecr-hangs-immediately-and-times-out
'IT' 카테고리의 다른 글
스위치 문에서 "defau4t"가 합법적인 이유는 무엇입니까? (0) | 2023.09.10 |
---|---|
인덱스의 데이터 프레임과 팬더의 데이터 (0) | 2023.09.10 |
iOS 11에서 위치 서비스가 작동하지 않음 (0) | 2023.09.05 |
mysql에 비해 npm mariasql의 이점 (0) | 2023.09.05 |
MySQL에 대한 SQL LEFT-JOIN 2개 필드 (0) | 2023.09.05 |