如何在 ECS 任务中访问实例存储卷?

如何在 ECS 任务中访问实例存储卷?

我有一个 Docker 映像,它下载一个大型数据集,对其进行处理,在此过程中创建大量临时文件,然后将最终结果上传到 S3。我不需要临时文件持久化/在实例故障后仍然存在,所以我想为此使用实例存储。但出于某种原因,Docker 拒绝使用它。

在我的启动配置中,我选择了具有实例存储(c3.8xlarge)的实例类型,然后将两个实例存储卷添加为 /dev/xvdcz 和 /dev/sdb。

在用户数据中,我挂载了 sdb 卷并使其可写:

sudo mkdir /media/storage
sudo mount /dev/sdb /media/storage
sudo chmod o+rw /media/storage

在任务定义中,我创建了一个名为“InstanceStorage”的卷,其源路径为“/media/storage”,并在容器定义中,我在 /storage 为该卷添加了一个挂载点。

现在,当我在任务运行时通过 ssh 进入实例并查看主机的 /media/storage 目录时,它是空的。任务日志清楚地显示它可以写入容器的 /storage 目录。它比实例存储小得多 - 可用空间为 7.8 GB,而不是 300 GB。

我尝试手动运行 Docker 容器并附加卷:

docker run -it -v /media/storage:/storage --entrypoint /bin/sh my-docker-image:latest

相同的行为:我可以写入/storage,文件甚至可以在退出并重新启动 Docker 容器后继续存在,但它太小了,并且我在容器内的 /storage 中创建的任何文件都不存在于主机上的 /media/storage 中。

查看主机和容器的 df -h 可以清楚地看到它安装了 /dev/xvda1—— 该卷还存储了docker镜像。

主持人:

Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      7,8G  848M  6,9G  11% /
devtmpfs         30G   88K   30G   1% /dev
tmpfs            30G     0   30G   0% /dev/shm
/dev/xvdb       315G   67M  299G   1% /media/storage

容器:

Filesystem                Size  Used Avail Use% Mounted on
/dev/mapper/docker-(...)  9.8G  1.1G  8.2G  12% /
tmpfs                      30G     0   30G   0% /dev
tmpfs                      30G     0   30G   0% /sys/fs/cgroup
/dev/xvda1                7.8G  848M  6.9G  11% /storage
shm                        64M     0   64M   0% /dev/shm

为什么会这样呢?

答案1

我终于找到了解决方案。此脚本为我指明了正确的方向。

您需要重新启动Docker服务。

显然,Docker 在执行用户数据脚本之前启动,并且它只能访问服务启动时挂载的卷。

因此我将其添加到我的用户数据脚本的末尾,并修复了它:

sudo service docker restart

相关内容