9

我正在尝试在 AWS 代码构建中构建一个 docker 容器,作为将容器部署到 ECR 的一种方式,但是我收到了这个错误。

Error while executing command: $(aws ecr get-login --region ap-southeast-1). Reason: exit status 255

在此处输入图像描述

此命令在 buildspec.yml 文件上运行,使用 aws/codebuild/ubuntu-base:14.04 并启用此标志,如果您想构建 Docker 映像或希望您的构建获得提升的权限。

日志文件如下:

[Container] 2018/10/11 00:52:49 Running command $(aws ecr get-login --region $AWS_DEFAULT_REGION --no-include-email)

An error occurred (AccessDeniedException) when calling the GetAuthorizationToken operation: User: arn:aws:sts::502776083946:assumed-role/code-build-timesheet/AWSCodeBuild-f1d205b1-b03f-4727-a4d7-a02118021eec is not authorized to perform: ecr:GetAuthorizationToken on resource: *

[Container] 2018/10/11 00:52:52 Command did not exit successfully $(aws ecr get-login --region $AWS_DEFAULT_REGION --no-include-email) exit status 255
[Container] 2018/10/11 00:52:52 Phase complete: INSTALL Success: false
[Container] 2018/10/11 00:52:52 Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: $(aws ecr get-login --region $AWS_DEFAULT_REGION --no-include-email). Reason: exit status 255
4

4 回答 4

41

此状态代码通常表示未经授权的用户。为了解决这个问题,我们需要让我们的 Code Build 角色能够与ECR. 为此:转到IAM然后将AmazonEC2ContainerRegistryPowerUser策略附加到您的CodeBuild角色。

于 2019-04-09T04:24:23.533 回答
1

aws-cli 版本 2 已更新且命令get-login已弃用,您应该使用get-login-password.

aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login
--username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com

您可以在 CodeBuild 中查看用于构建 docker 映像的更新文档:https ://docs.aws.amazon.com/codebuild/latest/userguide/sample-docker.html

于 2021-12-07T18:29:03.157 回答
0

您的 cloudwatch 日志中是否有更具体的错误?像 AccessDenied 还是其他什么?日志中应该有一些关于失败命令部分的详细信息。谢谢,鑫

于 2018-10-09T17:54:51.337 回答
0

就我而言,我添加了权限,但仍然遇到同样的问题。后来发现我在IAM角色中的“权限边界”没有让权限通过。因此,如果您将权限策略设置为允许ecr:GetAuthorizationToken但同时启用了权限边界,那么您需要将相同的权限添加到权限边界(或删除权限边界)。

在此处输入图像描述

于 2021-03-25T09:31:56.130 回答