У меня есть образ 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