17

我有一个自定义的docker镜像上传到ECS。我打开了权限来尝试解决这个问题(一旦我能够完成这个工作,我将再次锁定它)。我试图将docker映像部署到弹性beanstalk。我有一个docker启用弹性beanstalk环境设置。根据AWS文档,如果我从AWS内部拉取我的映像,我不需要传入证书。所以我上传我的Dockerrun.aws.json文件并尝试安装它。它失败,错误如下:AWS Docker部署

Command failed on instance. Return code: 1 Output: Failed to authenticate with ECR for registry '434875166128' in 'us-east-1'. Hook /opt/elasticbeanstalk/hooks/appdeploy/pre/03build.sh failed. For more detail, check /var/log/eb-activity.log using console or EB CLI.

/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文件中添加认证。它也不适合我。

Note that I am using a business account instead of a personal account, so there may be some unknown variances as well.

谢谢!

更新:我的用户此刻也拥有完整的权限,所以不应该有任何权限明智的阻碍。

+0

检查ECR存储库设置/权限像这里:https://media.amazonwebservices.com/blog/2015/ecr_permissions_1.png –

+0

也请确保IAM角色附加到豆茎(运行拉的实例)可以通过IAM权限访问ECR和ECS:http://docs.aws.amazon.com/AmazonECR/latest/userguide/ECR_IAM_policies.html –

+0

Thanks @MarcYoung。我确实已经设置了这些 –

回答

38

我遇到了同样的问题。

解决方案: 在AWS -> IAM -> Roles - >选择您的beanstalk正在使用的角色。

在我的情况下,它被设置为aws-elasticbeanstalk-ec2-role

权限的作用,重视政策:AmazonEC2ContainerRegistryReadOnly

在ECR没有必要给任何权限这个角色。

+0

你太棒了!这正是我所错过的。 –

+2

当您在AWS Elastic Beanstalk管理控制台中启动环境时,'aws-elasticbeanstalk-ec2-role'是默认的实例配置文件。 - http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/iam-instanceprofile.html –

+0

将文档LInk添加到使用权限“AmazonEC2ContainerRegistryReadOnly”的文档中:http://docs.aws.amazon.com/ elasticbeanstalk /最新/ DG/create_deploy_docker.container.console.html – zatziky

0

可以intialize必要的服务角色弹性魔豆(AWS-elasticbeanstalk-EC2角色,AWS-elasticbeanstalk服务角色,AWSServiceRoleForECS)通过弹性魔豆的控制台。 您必须在每个AWS账户上只执行一次:

  • 转至Elastic beanstalk控制台。
  • 接受“新设计”:在控制台的顶部,如果看到消息“我们正在测试新设计”,请选择接受使用新版本的控制台。警告,它似乎不能回滚到旧的控制台。
  • 启动“创建新应用程序”向导,并在该技术中使用默认示例应用程序。
  • 完成向导的所有步骤直到简历出现,并查看安全平台:您将看到“aws-elasticbeanbean -alk-ec2-role”和“aws-elasticbeanstalk-service-role”这两个角色。并终止向导以创建示例应用程序。
  • 一段时间后,应用程序应该运行
  • 在紧急情况下,进入IAM控制台和删除角色AWS-elasticbeanstalk-EC2角色和AWS-elasticbeanstalk服务角色,然后再次运行该向导。

我修正了“命令在实例上失败。返回代码:1输出:无法使用ECR进行注册表验证“和另一个奇怪的错误(”您提供的AWS访问密钥ID在我们的记录中不存在(ElasticBeanstalk :: ManifestDownloadError)“)。仍然有这个错误与旧的。