AWS Docker部署

时间:2016-08-22 15:48:12

标签: amazon-web-services docker amazon-elastic-beanstalk amazon-ecs

我有一个上传到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文件添加身份验证。它对我也不起作用。

  

请注意,我使用的是商家帐户而非个人帐户,因此可能会有一些未知的差异。

谢谢!

更新:我的用户此刻也拥有完全权限,因此不应该有任何权限方式阻碍。

2 个答案:

答案 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账户上只执行一次此操作:

  • 转到Elastic beanstalk控制台。
  • 接受“新设计”:在控制台顶部,如果看到“我们正在测试新设计”的消息,请选择接受使用新版本的控制台。警告,您似乎无法回滚到旧控制台。
  • 启动“创建新应用程序”向导,并使用该技术中的默认示例应用程序。
  • 完成向导的所有步骤,直到恢复,然后查看安全盘:您将看到两个角色“aws-elasticbeanstalk-ec2-role”和“aws-elasticbeanstalk-service-role”。并终止向导以创建示例应用程序。
  • 过了一会儿,应用程序应该正在运行
  • 如遇紧急情况,请转至IAM控制台并删除角色aws-elasticbeanstalk-ec2-role和aws-elasticbeanstalk-service-role并再次运行向导。

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