尽管使用 AWS ubuntu 容器,但我得到 AWS ECR 退出状态 255

I get AWS ECR exit status 255 despite using AWS ubuntu containers

我试图在 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

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

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

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

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