将绑定挂载与 Amazon ECS 结合使用
使用绑定挂载,主机上的文件或目录(如 Amazon EC2 实例)被挂载到容器中。Fargate 和 Amazon EC2 实例上托管的任务都支持绑定挂载。绑定挂载与使用它们的容器的生命周期相关。停止使用绑定挂载的所有容器后(例如,停止任务时),数据将被删除。对于托管在 Amazon EC2 实例上的任务,可以通过在任务定义中指定 host
和可选值 sourcePath
,将数据绑定到主机 Amazon EC2 实例的生命周期。有关更多信息,请参阅 Docker 文档中的使用绑定挂载
以下是绑定挂载的常见使用案例。
-
提供空数据卷以挂载在一个或多个容器中。
-
在一个或多个容器中挂载主机数据卷。
-
与相同任务中的其他容器共享来自源容器的数据卷。
-
将 Dockerfile 路径及其内容公开到一个或多个容器。
使用绑定挂载时的注意事项
使用绑定挂载时应考虑以下事项。
-
默认情况下,使用平台版本
1.4.0
或更高版本(Linux)或者1.0.0
或更高版本(Windows)在 AWS Fargate 上托管的任务会收到至少 20GiB 的临时存储以用于绑定挂载。您可以增加临时存储总量,最多可达 200GiB,方法是在您的任务定义中指定ephemeralStorage
参数。 -
要在任务运行时将 Dockerfile 中的文件公开到数据卷,Amazon ECS 数据平面将查找
VOLUME
指令。如果VOLUME
指令中指定的绝对路径与任务定义中指定的containerPath
绝对路径相同,则指令路径VOLUME
中的数据将复制到数据卷。在下面的 Dockerfile 示例中,/var/log/exported
目录中名为examplefile
的文件将写入主机,然后挂载到容器中。FROM public.ecr.aws/amazonlinux/amazonlinux:latest RUN mkdir -p
/var/log/exported
RUN touch/var/log/exported/examplefile
VOLUME ["/var/log/exported
"]预设情况下,卷权限设置为
0755
和所有者设置为root
。您可以在 Dockerfile 中自定义这些权限。以下示例将目录的所有者定义为node
。FROM public.ecr.aws/amazonlinux/amazonlinux:latest RUN yum install -y shadow-utils && yum clean all RUN useradd
node
RUN mkdir -p /var/log/exported && chownnode
:node
/var/log/exported RUN touch /var/log/exported/examplefile USERnode
VOLUME ["/var/log/exported"] -
对于 Amazon EC2 实例上托管的任务,如果未指定
host
和sourcePath
值,则 Docker 进程守护程序将为您管理绑定挂载。如果没有容器引用此绑定挂载,则 Amazon ECS 容器代理任务清理服务最终会将其删除。默认情况下,这发生在容器退出三个小时后。但是,您可以使用ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION
代理变量配置此持续时间。有关更多信息,请参阅 Amazon ECS 容器代理配置。如果需要在容器的生命周期内保持此数据,请为绑定挂载指定一个sourcePath
值。