IT

AWS ECR에 대한 도커 푸시가 즉시 중단되고 시간 초과됨

itgroup 2023. 9. 5. 20:10
반응형

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 pushECS 레지스트리로 가는 것이 좋습니다.

먼저 ECR에서 도커 리포지토리를 만든 다음 ECR로 밀어 넣었을 때 문제가 해결되었습니다.도커 푸시 명령을 실행하기 전에 도커 리포지토리를 만들어야 합니다.

아직 문제가 해결되지 않은 경우.는 이 짧은 비디오 https://www.youtube.com/watch?v=89ZeXaZEf80&ab_channel=IdenticalCloud 를 보는 것을 강력히 추천합니다.

다음은 문제를 해결하기 위해 수행한 단계입니다(비디오를 보지 않으려는 경우).

  1. "액세스 키"가 선택된 새 IAM 사용자 생성
  2. 권한에서 "기존 정책 직접 첨부"를 누른 후 "Amazon EC2 ContainerRegistry"를 선택합니다.전체 액세스"
  3. CSV 파일 다운로드
  4. 터미널에서 "AWS 구성"을 실행하고 CSV 파일에서 자격 증명을 전달합니다.
  5. ECR을 만든 위치로 위치를 설정합니다(내 위치는 us-east-1).
  6. 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

나를 위해 일했습니다.

해결책을 찾지 못했나요?

아마도 당신은 내가 가지고 있던 유스케이스에 빠져 있는 것 같습니다.

식별자:

  1. 동일한 터미널에서 서로 다른 AWS 계정으로 작업하고 있습니다.

  2. AWS 계정 사이를 이동할 때 사용하는export AWS_PROFILE터미널 수준에서(또는 일부 도구 또는 명령을 통해) 프로파일을 내보냅니다.

  3. 당신은 때로는 밀 수 있고 때로는 밀 수 없습니다.

  4. 사용하여 로그인할 수 있습니다.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

반응형