Назад | Перейти на главную страницу

Как я могу получить доступ к тому хранилища экземпляров в задаче 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 контейнера. Он просто намного меньше, чем Instance Store - 7,8 ГБ вместо 300.

Я попытался вручную запустить контейнер Docker и прикрепить том:

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

Такое же поведение: я могу писать в / storage, файлы даже выживают после выхода и перезапуска контейнера Docker, но он слишком мал, и любые файлы, которые я создаю в / storage внутри контейнера, не существуют в / media / storage на хосте.

Глядя на df -h как на хосте, так и на контейнере, становится ясно, что вместо этого он смонтировал / dev / xvda1 - том, на котором также хранятся образы докеров.

Хост:

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

Зачем ему это делать?

Я наконец нашел решение. Этот сценарий указал мне в правильном направлении.

Вам необходимо перезапустить службу Docker.

Очевидно, Docker запускается до того, как будут выполнены сценарии пользовательских данных, и он может получить доступ только к томам, которые были смонтированы при запуске службы.

Поэтому я добавил это в конец моего сценария пользовательских данных, и это исправило:

sudo service docker restart