我们可以在 AWS ECS docker 容器上挂载 EFS 吗?
Posted
技术标签:
【中文标题】我们可以在 AWS ECS docker 容器上挂载 EFS 吗?【英文标题】:Can we mount EFS on AWS ECS docker container? 【发布时间】:2018-08-05 19:36:06 【问题描述】:我有一个运行 docker 容器的 ECS 实例。我想在 ECS 上运行的 docker 容器上挂载 EFS。那有可能吗?
我可以在 ECS 实例上挂载 EFS,但不能在 ECS 上运行的 docker 容器上挂载。
EFS 具有直接连接功能,并且能够从 docker 远程登录到 2049 端口。
mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 X.X.X.X:/ /efs
错误是:- mount.nfs4: Operation not allowed
【问题讨论】:
【参考方案1】:更新; 2020 年 1 月 17 日 - 预览 ECS/EFS 支持
2020 年 1 月 17 日 AWS announced an preview for ECS support for EFS。需要注意的是,这目前是一个预览版;请参阅configuration documentation 中有关这意味着什么的信息。
您可以简单地定义新的EFSVolumeConfiguration
对象,而不是定义卷及其所有连接参数。
"EFSVolumeConfiguration":
"fileSystemId": "fs-xxxxxx",
"rootDirectory": "/mnt/volume/path"
原答案
截至 2018 年 8 月,借助 docker 卷支持,您现在可以mount NFS shares directly into an ECS container。
目前可用的文档没有详细说明如何通过 docker volume 将 EFS 与 ECS 一起使用,但这是可能的。
配置 docker 卷
首先,在您的任务配置中包含一个volumes
部分,类似于以下内容:
"volumes": [
"name": "efs",
"host": null,
"dockerVolumeConfiguration":
"autoprovision": null,
"labels": null,
"scope": "task",
"driver": "local",
"driverOpts":
"type": "nfs",
"device": ":/",
"o": "addr=<fs-id>.efs.us-east-1.amazonaws.com,nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport"
]
确保更新 o
选项中的 addr
参数以匹配 EFS 文件系统的 DNS 名称。
然后,将此卷包含在您的一个容器定义中的挂载中。有关语法的更多信息,请参阅Docker Volumes。
"containerDefinitions": [
"mountPoints": [
"sourceVolume": "efs",
"containerPath": "/path/to/mount_volume",
"readOnly": false
]
]
用于 NFS 连接的配置选项是 AWS 在撰写本文时为 Mounting EFS filesystems 推荐的配置选项。
【讨论】:
我希望我能给你更多的赞成票。太棒了! 这是否适用于 AWS Batch 自动生成的任务定义? AFAIK 编号。【参考方案2】:它应该是您任务定义的一部分,您需要在任务定义中添加卷,然后在源卷选项中引用它,这是来自 AWS 的教程。
https://aws.amazon.com/blogs/compute/using-amazon-efs-to-persist-data-from-amazon-ecs-containers/
"volumes": [
"name": "efs",
"host":
"sourcePath": "/mnt/efs/mysql"
]
【讨论】:
谢谢@Sudharsan。我已成功配置它。我从您的回答中得到了提示和适当的解决方法。参考网址:- docs.aws.amazon.com/AmazonECS/latest/developerguide/… 注意:上述配置仅适用于 ECS 上的 EC2 启动类型。对于 Fargate,您必须使用 efsVolumeConfiguration以上是关于我们可以在 AWS ECS docker 容器上挂载 EFS 吗?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Jenkins 或 Job Scheduler 在 AWS ECS 上自动部署 Docker 容器
Spring Cloud 微服务(五) 部署到AWS ECS