ECS Fargate 不支持绑定挂载
Posted
技术标签:
【中文标题】ECS Fargate 不支持绑定挂载【英文标题】:ECS Fargate does not support bind mounts 【发布时间】:2021-06-16 03:04:37 【问题描述】:我正在尝试将 nodejs docker-compose 应用程序部署到 aws ecs 中,这是我的 docker compose 文件的外观 -
version: '3.8'
services:
sampleapp:
image: jeetawt/njs-backend
build:
context: .
ports:
- 3000:3000
environment:
- SERVER_PORT=3000
- CONNECTIONSTRING=mongodb://mongo:27017/isaac
volumes:
- ./:/app
command: npm start
mongo:
image: mongo:4.2.8
ports:
- 27017:27017
volumes:
- mongodb:/data/db
- mongodb_config:/data/configdb
volumes:
mongodb:
mongodb_config:
但是,当我在创建 ecs 上下文后尝试使用 docker compose up 运行它时,它会抛出以下错误 -
WARNING services.build: unsupported attribute
ECS Fargate does not support bind mounts from host: incompatible attribute
我没有指定任何我想为此使用Fargate
的地方。有什么方法我仍然可以使用 ec2 而不是 Fargate
来部署应用程序?
【问题讨论】:
【参考方案1】:默认模式是 Fargate。您可能没有在运行命令中指定具有 ec2 实例的 ecs 集群。
您的 docker compose 有一个绑定挂载,因此您的任务需要部署到该挂载可以工作的实例。
此示例讨论部署到支持 ec2 的集群。 https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-cli-tutorial-ec2.html
【讨论】:
【参考方案2】:Fargate 是默认设置,无法告诉它您要部署在 EC2 上。然而,当 Fargate 无法提供所需的功能(例如 GPU)时,我们必须在 EC2 上进行部署。
如果你真的需要使用绑定挂载并且需要一个 EC2 实例,你可以使用这个技巧(我没有这样做,所以我基本上在这里集思广益):
将您的任务配置为使用 GPU (see examples here) 使用docker compose convert
转换您的撰写
手动编辑 CFN 模板以使用不同的实例类型(以避免部署基于 GPU 的实例及其相关价格)
部署生成的 CFN 模板。
如果你真的需要的话,你甚至可以用一些 sed
circus 来自动化这个过程。
正如我所说,我还没有尝试过,我不确定这有多可行。但我猜它不会太复杂。
【讨论】:
以上是关于ECS Fargate 不支持绑定挂载的主要内容,如果未能解决你的问题,请参考以下文章
Amazon ECS:对于 Jenkins amazon-ecs-plugin 的给定值不存在 Fargate 配置