无法将EFS接入点安装到ECS卷

时间:2020-09-25 05:40:00

标签: amazon-web-services docker devops amazon-ecs amazon-efs

尝试通过EFS接入点将ECS卷挂载到EFS时遇到问题。

使用该文件系统的ClientWrite,ClientRead和ClientRootAccess设置任务角色。

使用posix用户ID 1001和组ID 1001以及权限755设置访问点。

群集和文件系统位于正确的VPC中。

但是ECS无法启动此错误的任务:

守护程序的错误响应:无法复制以下文件的文件信息: / var / lib / ecs / volumes / {{task-name}}:无法锁定 / var / lib / ecs / volumes / {{task-name}}

如果我以根用户身份将访问点的POSIX用户ID和组ID设置为0,则可以启动任务。但是出于安全原因,我觉得它不是共享FS中的最佳选择。

在进行一些常规搜索后,我形成一个假设,即在装入卷后,容器的用户或其主机已由root更改,这与Dockerfile中的任何进一步的文件/目录操作相混淆。 AWS Access Points文档指出:

启用用户强制实施后,Amazon EFS会替换NFS客户端的 在访问点上配置了身份的用户和组ID 用于所有文件系统操作。

并且因为我认为/var/lib/ecs/volumes/...实际上是容器或主机目录。

我该如何解决这个问题?

fyi:任务在竞价型实例集群中运行,因此在这种情况下手动安装卷不是理想的解决方案

1 个答案:

答案 0 :(得分:0)

您尝试运行的 Docker 映像中定义的 uid/gid 与您尝试使用的 1001/1001 uid/gid 之间是否有可能不匹配?

我们在获取定义了卷的基本图像并尝试更改图像中主要用户的 uid 时遇到了同样的错误。由于您无法更改卷的文件所有权或权限,因此一旦创建卷,docker 守护程序将尝试将原始 uid 所有权应用于挂载的 EFS 卷,从而导致 EFS 访问点阻止所有权/权限的更改。

您可以通过在本地 shell 进入 docker 容器或运行 docker execls -la /path/to/container/folder 来检查这一点,并检查该文件夹的所有权是否设置为您的 uid 1001 的用户。