尽管使用 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的主要内容,如果未能解决你的问题,请参考以下文章
无法在 AWS EC2 (Ubuntu) apache 系统上 SSL Godaddy 验证证书
无法从我的ubuntu EC2计算机连接到AWS DocumentDB