ECR 存储库的 Dockerrun.aws.json 结构

Posted

技术标签:

【中文标题】ECR 存储库的 Dockerrun.aws.json 结构【英文标题】:Dockerrun.aws.json structure for ECR Repo 【发布时间】:2016-04-03 21:33:23 【问题描述】:

我们正在从 Docker Hub 切换到 ECR,我很好奇如何构建 Dockerrun.aws.json 文件以使用此映像。我试图将名称修改为<my_ECR_URL>/<repo_name>:<image_tag>,但这并不成功。我还看到了使用 S3 上的身份验证文件的私有注册表的详细信息,但是当aws ecr get-login 是使用 ECR 进行身份验证的推荐方式时,这似乎不是正确的路线。

谁能指出我如何在 Beanstalk Dockerrun.aws.json 文件中使用 ECR 图像?

如果我查看 ECS 任务定义,有一个名为 com.amazonaws.ecs.capability.ecr-auth 的必需属性,但我没有在我的 Dockerrun.aws.json 文件中的任何地方设置它,我不确定需要在那里设置什么。也许它是一个 S3 存储桶?每次我尝试从 ECS 运行 Elastic Beanstalk 创建的任务时,都需要一些东西,我得到:

Run tasks failed
Reasons : ATTRIBUTE

非常感谢任何见解。

更新我从其他一些 threads 看到,这曾经发生在早期版本的 ECS 代理中,但我目前正在运行 Agent version 1.6.0Docker version 1.7.1,我认为这是推荐的版本。这可能是 Docker 版本的问题吗?

【问题讨论】:

【参考方案1】:

事实证明,ECS 代理只能提取 1.7 版的图像,而这正是我的失败之处。更新代理解决了我的问题,希望它可以帮助其他人。

【讨论】:

【参考方案2】:

如果您使用的是之前为 Elastic Beanstalk 创建的角色,这很可能是 IAM 角色的问题。确保运行 Elastic Beanstalk 的角色附加了 AmazonEC2ContainerRegistryReadOnly 托管策略

来源:http://docs.aws.amazon.com/AmazonECR/latest/userguide/ECR_IAM_policies.html

【讨论】:

我也怀疑过,但是 Beanstalk 用户的 IAM 策略具有完全的 AWS 访问权限,并且包含在 ECR 权限中。【参考方案3】:

ECS 代理的version 1.7.0 中添加了对 ECR 的支持。

【讨论】:

【参考方案4】:

使用 Elasticbeanstalk 和 ECR 时,您无需进行身份验证。只要确保用户有AmazonEC2ContainerRegistryReadOnly的策略

您可以使用 Amazon EC2 Container Registry (Amazon ECR) 将自定义 Docker 映像存储在 AWS 中。当您将 Docker 映像存储在 Amazon ECR、Elastic Beanstalk 自动向 Amazon ECR 注册表与您的环境的实例配置文件,因此您 不需要生成认证文件并上传到亚马逊 简单存储服务 (Amazon S3)。

但是,您确实需要向您的实例提供以下权限 通过添加权限访问您的 Amazon ECR 存储库中的图像 到您环境的实例配置文件。您可以附上 实例的 AmazonEC2ContainerRegistryReadOnly 托管策略 配置文件以提供对所有 Amazon ECR 存储库的只读访问权限 您的帐户,或使用 以下模板创建自定义策略:

来源:http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker.container.console.html

【讨论】:

以上是关于ECR 存储库的 Dockerrun.aws.json 结构的主要内容,如果未能解决你的问题,请参考以下文章

ECR - 啥是注册表,啥是存储库

如何使 ECR 存储库公开?

为 ECR 中的所有存储库设置一个生命周期策略

将新映像推送到 ECR 存储库时如何自动部署到 ECS Fargate

在 AWS EC2 上从 AWS ECR 中提取图像,而不使用 docker login,但使用 EC2 实例角色和 ECR 存储库权限

AWS ECS Fargate 从跨账户 ECR 存储库中提取映像