我们可以在 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

Docker 在 AWS ECS 中运行

AWS ECS Docker 容器 Boto3 IAM 权限

让我们在 AWS ECS 上加密 docker nginx

Docker 容器在使用 AWS ECR 的 AWS ECS 中不起作用