繁体   English   中英

我们可以在 AWS ECS docker 容器上挂载 EFS 吗?

[英]Can we mount EFS on AWS ECS docker container?

我有一个 ECS 实例,我的 docker 容器正在其上运行。 我想在 ECS 上运行的 docker 容器上安装 EFS。 那怎么可能呢?

我能够将 EFS 安装在 ECS 实例上,但不能安装在 ECS 上运行的 docker 容器上。

EFS 是直接连接的,并且能够从 docker 在 2049 端口上对其进行 te.net。

mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 XXXX:/ /efs

错误是:- mount.nfs4:不允许操作

更新; 2020 年 1 月 17 日 - 预览 ECS/EFS 支持

2020 年 1 月 17 日,AWS 宣布了对 EFS 的 ECS 支持的预览 需要注意的是,这是目前的预览版本 请参阅配置文档中有关这意味着什么的信息。

您可以简单地定义新的EFSVolumeConfiguration对象,而不是定义卷及其所有连接参数。

"EFSVolumeConfiguration": {
  "fileSystemId": "fs-xxxxxx",
  "rootDirectory": "/mnt/volume/path"
}

原答案

自 2018 年 8 月起,借助 docker 卷支持,您现在可以将 NFS 共享直接挂载到 ECS 容器中

当前可用的文档没有详细说明如何通过 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 卷

"containerDefinitions": [
    {
        "mountPoints": [
            {
                "sourceVolume": "efs",
                "containerPath": "/path/to/mount_volume",
                "readOnly": false
            }
        ]
    }
]

用于 NFS 连接的配置选项是 AWS 在撰写本文时推荐的用于挂载 EFS 文件系统的选项

它应该是您任务定义的一部分,您需要在任务定义中添加卷,然后在源卷选项中引用它,这是来自 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"
      }
    }
  ]

方法一:当你想把EFS挂载到EC2实例上,然后让所有的容器都使用它的时候。 运行以下命令将 EFS 挂载到 EC2 实例。

sudo mount -t efs fs-0ad7c287c2f7c27c2 /mnt/efs

然后在任务定义中将其作为 sourcePath 引用,以便容器可以使用 efs 挂载路径作为可写层。

"volumes": [
 {
  "name": "efs",
  "host": {
    "sourcePath": "/mnt/efs/mysql"
   }
 }
]

方法 2:在 ECS 上启用自动缩放时,最好将 EFS 卷直接附加到 ECS 任务/容器。 在任务定义中提及如下,因此容器将在生成时直接安装 EFS。

"volumes": [
    {
        "name": "Tiger-Test",
        "efsVolumeConfiguration": {
        "fileSystemId": "fs-0ad7c287c2f7c27c2"
        }
    }
]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM