【问题标题】:Can we mount EFS on AWS ECS docker container?我们可以在 AWS ECS docker 容器上挂载 EFS 吗?
【发布时间】: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

【问题讨论】:

    标签: amazon-web-services amazon-ec2 amazon-ecs amazon-efs


    【解决方案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
    猜你喜欢
    • 2017-02-17
    • 1970-01-01
    • 2022-07-07
    • 2020-01-02
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-13
    相关资源
    最近更新 更多