【问题标题】:AWS Docker deploymentAWS Docker 部署
【发布时间】:2016-12-29 06:07:05
【问题描述】:

我有一个自定义 docker 镜像上传到 ECS。我打开了权限来尝试解决这个问题(一旦我可以让它工作,我会再次锁定它)。我正在尝试将 docker 映像部署到弹性 beantalk。我设置了一个启用 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 文件添加身份验证。这对我也不起作用。

请注意,我使用的是企业帐户而不是个人帐户,因此也可能存在一些未知差异。

谢谢!

更新:我的用户目前也拥有完全权限,因此不应该有任何权限方面的障碍。

【问题讨论】:

  • 检查 ECR 存储库设置/权限,如下所示:media.amazonwebservices.com/blog/2015/ecr_permissions_1.png
  • 还要确保附加到 beanstalk(运行 pull 的实例)的 IAM 角色可以通过 IAM 权限访问 ECR 和 ECS:docs.aws.amazon.com/AmazonECR/latest/userguide/…
  • 谢谢@MarcYoung。我确实已经正确设置了这些。
  • @NickAllen 我也遇到了这个问题,有什么更新吗?在存储库的所有权限下,我同时拥有“aws-elasticbeanstalk-ec2-role”和“aws-elasticbeanstalk-service-role”。
  • @IanWalter 不幸的是我没有。我暂时把它放在次要位置。希望有人在某个时间点提出解决方案。

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


【解决方案1】:

我遇到了同样的问题。

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

在我的例子中,它设置为aws-elasticbeanstalk-ec2-role

在角色的权限下,附加政策:AmazonEC2ContainerRegistryReadOnly

在 ECR 中,无需为此角色授予任何权限。

【讨论】:

【解决方案2】:

您可以使用 Elastic Beanstalk 的 new 控制台为 Elastic 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)") 使用新控制台。旧的我仍然有这个错误。

【讨论】: