我有一个上传到ECS的自定义docker镜像。我打开了权限,试图解决这个问题(一旦我能够解决这个问题,我会再次将其锁定)。我正在尝试将docker镜像部署到弹性beanstalk。我设置了一个支持docker的弹性beanstalk环境。根据AWS文档,如果我从AWS中提取我的图像,我不需要传递凭据。所以我上传了我的Dockerrun.aws.json文件并尝试安装它。它失败并出现错误:
实例上的命令失败。返回码:1输出:无法使用ECR对'us-east-1'中的注册表'434875166128'进行身份验证。挂钩/opt/elasticbeanstalk/hooks/appdeploy/pre/03build.sh失败。有关更多详细信息,请使用控制台或EB CLI检查/var/log/eb-activity.log。
/var/log/eb-activity.log信息没有任何用处。
这是我的Dockerrun.aws.json文件:
{
"AWSEBDockerrunVersion": "1",
"Image": {
"Name": "{id000xxxx}.dkr.ecr.us-east-1.amazonaws.com/my-repo:1.0.0",
"Update": "true"
},
"Ports": [
{
"ContainerPort": "4000"
}
],
"Logging": "/var/log/app-name"
}
我还尝试在S3中使用dockercfg.json文件添加身份验证。它对我也不起作用。
请注意,我使用的是商家帐户而非个人帐户,因此可能会有一些未知的差异。
谢谢!
更新:我的用户此刻也拥有完全权限,因此不应该有任何权限方式阻碍。
答案 0 :(得分:55)
我遇到了同样的问题。
解决方案:
在AWS -> IAM -> Roles - >
中选择beanstalk使用的角色。
在我的情况下,它设置为aws-elasticbeanstalk-ec2-role
在角色的权限下,附加政策:AmazonEC2ContainerRegistryReadOnly
在ECR中,无需为此角色授予任何权限。
答案 1 :(得分:0)
您可以使用Elastic Beanstalk的 new 控制台为弹性beanstalk(aws-elasticbeanstalk-ec2-role,aws-elasticbeanstalk-service-role,AWSServiceRoleForECS)初始化必要的服务角色。 您必须在每个AWS账户上只执行一次此操作:
我修复了“命令在实例上失败。返回代码:1输出:无法使用ECR进行身份验证以进行注册”和另一个奇怪的错误(“您提供的AWS访问密钥ID在我们的记录中不存在。”(ElasticBeanstalk: :ManifestDownloadError)“)使用新控制台。我仍然有旧错误。