Jes*_*mey 192 command-line-interface docker amazon-ecr
我正在尝试将我的第一个 docker 映像推送到 ECR。我已经按照AWS提供的步骤进行操作,事情似乎进展顺利,直到最后的推送立即超时。具体来说,我将 aws ecr 凭证传递给 docker 并收到“登录成功”消息。然后我标记也有效的图像。推送到 ecr 存储库时,我没有收到任何错误消息,只有以下内容:
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
Run Code Online (Sandbox Code Playgroud)
它尝试了很多次,然后退出且没有任何消息。知道出了什么问题吗?
Jes*_*mey 167
我弄清楚了我的问题。我没有使用正确的凭据。我有一个个人 AWS 账户作为我的默认凭证,需要将我的工作配置文件添加到我的凭证中。
编辑
如果您有多个 aws 配置文件,您可以在 docker 登录时提及配置文件名称,如下所示(假设您aws configure --profile someprofile之前已完成),
aws ecr get-login-password --region us-east-1 --profile someprofile | docker login ....
Run Code Online (Sandbox Code Playgroud)
小智 50
确保存储库的名称与图像的名称相同。
image:latest 756839881602.dkr.ecr.us-east-1.amazonaws.com/image:latest在这种情况下,我的存储库名称是image,我的图像名称image也是。这对我有用。
son*_*xqt 18
就我而言,我想要推送到的存储库不存在(例如,我尝试推送到my-app/backend:latest但只有my-app/cms存储库存在)。因此,请确保您的存储库存在于正确区域的AWS ECR 控制台中。从 AWS CLI (EOF) 返回的错误根本没有帮助。
小智 17
我必须为遇到此问题的其他人添加。转到 IAM 并确保您具有放置权限。我不想说我浪费了多长时间才弄清楚这一点。
编辑以帮助@zac的答案:需要附加的策略是AmazonEC2ContainerRegistryFullAccess和AWSAppRunnerServicePolicyForECRAccess
Ste*_*ers 13
就我而言,它与 MFA(多重身份验证)有关。我必须创建一个会话令牌。docker登录看似成功,但是push不起作用。
以下脚本将为您完成所有操作并创建用于登录的 aws 配置文件“mfa”: get_mfa_credentials.py
执行后,您可以通过以下方式登录:
aws ecr get-login-password --region <YOUR_REGION> --profile mfa | docker login --username AWS --password-stdin <Your_REPO>
Run Code Online (Sandbox Code Playgroud)
我不知道是谁写的,但我非常感谢这个人。
感谢 AWS 提供了无济于事的糟糕工具。
Hie*_*ieu 13
假设您已成功通过 AWS 身份验证,并且您有权读取、写入 ECR,请检查存储库是否存在
aws ecr describe-repositories --repository-name reponame
Run Code Online (Sandbox Code Playgroud)
如果您发现错误RepositoryNotFoundException,那么您将使用以下命令创建该存储库
aws ecr create-repository --repository-name reponame
Run Code Online (Sandbox Code Playgroud)
之后再尝试推一下就可以了!
ayk*_*dem 12
检查您的 aws 权限。除了AmazonEC2ContainerRegistryFullAccess权限之外,还必须为正确的资源授予以下操作。特别是检查"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": "*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
确保您使用正确的配置文件并且存储库存在
使用配置文件登录的命令: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}:(来源)
| 归档时间: |
|
| 查看次数: |
103779 次 |
| 最近记录: |