8

我有一个运行 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 XXXX:/ /efs

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

4

2 回答 2

20

更新; 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"
       }
     }
   }
]

确保更新选项addr内的参数o以匹配 EFS 文件系统的 DNS 名称。

然后,将此卷包含在您的容器定义之一的挂载中。有关语法的更多信息,请参阅Docker 卷

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

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

于 2018-10-05T18:55:58.360 回答
4

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