AWS Docker 部署

AWS Docker deployment

我有一张自定义 docker 图片上传到 ECS。我打开了尝试解决这个问题的权限(一旦我可以让它工作,我会再次锁定它)。我正在尝试将 docker 图像部署到 Elastic Beanstalk。我设置了 docker 启用的弹性 beantalk 环境。根据 AWS 文档,如果我从 AWS 中拉取图像,则不需要传递凭据。所以我上传了我的 Dockerrun.aws.json 文件并尝试安装它。它因错误而失败:

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.

谢谢!

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

我遇到了同样的问题。

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

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

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

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

您可以使用 Elastic 的 new 控制台为 elastic beanstalk(aws-elasticbeanstalk-ec2-role、aws-elasticbeanstalk-service-role、AWSServiceRoleForECS)初始化必要的服务角色豆茎。 您只需在每个 AWS 账户上执行一次此操作:

  • 转到 Elastic beantalk 控制台。
  • 接受 "new design" :在控制台顶部,如果看到消息 "we re testing a new design",请选择接受使用新版本的控制台。警告,您似乎无法回滚到旧控制台。
  • 启动新建应用程序向导,使用技术中的默认示例应用程序。
  • 完成向导的所有步骤直到恢复,然后查看安全面板:您将看到两个角色 "aws-elasticbeanstalk-ec2-role" 和 "aws-elasticbeanstalk-service-role"。并终止创建示例应用程序的向导。
  • 再过一段时间,应用应该运行ning
  • 如遇紧急情况,请前往 IAM 控制台并再次删除角色 aws-elasticbeanstalk-ec2-role 和 aws-elasticbeanstalk-service-role 以及 运行 向导。

我使用新控制台修复了 "Command failed on instance. Return code: 1 Output: Failed to authenticate with ECR for registry" 和另一个奇怪的错误 ("The AWS Access Key Id you provided does not exist in our records. (ElasticBeanstalk::ManifestDownloadError)")。我用旧的还是有这个错误。