我正在使用 Elastic Beanstalk 的多容器 Docker 配置将我的一个 AWS Elastic Beanstalk 应用程序转换为 Docker。我已经创建了一个具有新环境的新 EB 应用程序。当我尝试部署我的Dockerrun.aws.json
配置时,EB 最终失败,并在事件选项卡中显示以下错误:
Service:AmazonECS, Code:ClientException, Message:Invalid setting for
container 'api'. At least one of 'memory' or 'memoryReservation' must
be specified., Class:com.amazonaws.services.ecs.model.ClientException
我的Dockerrun.aws.json
配置大致如下:
{
"AWSEBDockerrunVersion": 2,
"containerDefinitions": [
{
"name": "api_proxy",
"image": "{account_id}.dkr.ecr.us-east-1.amazonaws.com/{repo}:latest",
"essential": true,
"memory": 128,
"portMappings": [
{
"hostPort": 80,
"containerPort": 80
}
],
"links": [
"api"
]
},
{
"name": "api",
"image": "{account_id}.dkr.ecr.us-east-1.amazonaws.com/{repo}:latest",
"environment": {
"DJANGO_SETTINGS_MODULE": "api.aws"
},
"essential": true,
"memory": 128
}
]
}
任何帮助都将受到感激。
更新2018-02-15:
我当前的部署过程如下。我首先创建 Docker 映像并将其上传到 Amazon 的 ECR。然后我压缩文件Dockerrun.aws.json
。由于这是在新的 AWS EB 环境中首次部署应用程序,因此我目前正在环境创建过程中上传 zip 文件。我选择的平台是Preconfigured platform: Multi-container Docker
。对于应用程序代码,我上传包含该文件的 zip 文件Dockerrun.aws.json
。
答案1
据我所知文档外- 环境选项应该是对象数组,因此你的 json 应该看起来像
{
"AWSEBDockerrunVersion": 2,
"containerDefinitions": [{
"name": "api",
"image": "nginx:latest",
"essential": true,
"memory": 128,
"environment": [{
"name": "DJANGO_SETTINGS_MODULE",
"value": "api.aws"
}]
},{
"name": "api_proxy",
"image": "nginx:latest",
"essential": true,
"memory": 128,
"links": ["api"],
"portMappings": [{
"hostPort": 80,
"containerPort": 80
}]
}]
}
至少我能够使用上面的 json 运行环境