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)")。我用旧的还是有这个错误。
我有一张自定义 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)")。我用旧的还是有这个错误。