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

Posted

技术标签:

【中文标题】尽管使用 AWS ubuntu 容器,但我得到 AWS ECR 退出状态 255【英文标题】:I get AWS ECR exit status 255 despite using AWS ubuntu containers 【发布时间】:2019-03-12 15:38:33 【问题描述】:

我正在尝试在 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

【问题讨论】:

即使Error while executing command: $(aws ecr get-login --region $AWS_DEFAULT_REGION --no-include-email). Reason: exit status 255 也不起作用 【参考方案1】:

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

【讨论】:

我在尝试使我的云端缓存无效时遇到类似的错误 - 向 codebuild 角色添加执行此操作的 IAM 权限解决了问题【参考方案2】:

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

【讨论】:

【参考方案3】:

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

【讨论】:

已更新。它说未经授权获取授权令牌 是的,你可以给你的服务角色添加相关权限,你可以参考这个文档:docs.aws.amazon.com/codebuild/latest/userguide/…【参考方案4】:

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

【讨论】:

以上是关于尽管使用 AWS ubuntu 容器,但我得到 AWS ECR 退出状态 255的主要内容,如果未能解决你的问题,请参考以下文章

如何在Ubuntu上创建及管理LXC容器

如何利用容器降低云成本?

无法在 AWS EC2 (Ubuntu) apache 系统上 SSL Godaddy 验证证书

无法从我的ubuntu EC2计算机连接到AWS DocumentDB

SSH 权限被拒绝(公钥、密码) - 容器 docker ubuntu 18.04

从 Windows 部署到 aws 上的 ubuntu 实例