Создание ограничения размера тома в докере, которое обеспечивает ограничение - без предварительной загрузки всего огромного файла и только после этого с сообщением о том, что загрузка не удалась?

Я пытаюсь создать ограничение на размер диска контейнера в докере. В частности, у меня есть контейнер, который загружает данные, и я хочу, чтобы эти данные были ниже предела, который я могу ограничить заранее.

До сих пор то, что я создал, работает на поверхностном уровне (предотвращает сохранение файла на компьютере) - однако я могу наблюдать, как контейнер выполняет свою работу, и я вижу, что загрузка завершена до 100%, прежде чем он говорит: «Загрузка не удалась». Поэтому кажется, что он загружается во временный каталог, а затем проверяет размер файла, прежде чем передать его в окончательное место. (или нет)

Это не полностью решает проблему, которую я пытался исправить, потому что, очевидно, загрузка потребляет много ресурсов. Я не уверен, что именно мне здесь не хватает..

Это то, что создает вышеуказанное поведение:

sudo zfs create new-pool/zfsvol1
sudo zfs set quota=1G new-pool/zfsvol1
docker run -e "TASK=download" -e "AZURE_SAS_TOKEN= ... " -v /newpool/zfsvol1:/data containerName azureFileToDownload

У меня было такое же поведение при интерактивном запуске контейнера без томов и загрузки в контейнер. Я попытался изменить драйвер хранилища (внутри информации $ docker) на zfs (из оверлея), и это не помогло. Я просмотрел плагины для докеров, но похоже, что они не решат проблему.

Все это выполняется внутри виртуальной машины Ubuntu; Я сделал пул zfs, чтобы проверить все это. Я почти уверен, что этого не должно происходить, потому что это не очень полезно. Кто-нибудь знает, почему это происходит?


person programmer12    schedule 08.07.2020    source источник
comment
Есть ли у вас какая-либо видимость (куда записываются данные файла) или контроль (добавьте проверку размера файла) над containerName, о котором вы упомянули, или какой-либо способ проверить размер файла перед запуском контейнера?   -  person chash    schedule 08.07.2020
comment
Эй, вы имеете в виду, куда он идет, когда говорит от 0 до 100%? Я не уверен в этом .. Но фактический файл не загружается в конце дня. Я бы предпочел не проверять размер файла перед загрузкой, потому что я использую GCP, Azure и AWS, поэтому для каждого из них потребуется свой метод (некоторые из которых я не уверен, что это возможно сделать?), обычно это должно решить все из них   -  person programmer12    schedule 08.07.2020
comment
Если вы не хотите проверять размер файла перед его загрузкой, я думаю, вам нужно выяснить, где файл буферизуется во время загрузки. Если он находится на диске, ограничьте размер каталога загрузки. Если он находится в памяти, закройте доступную память.   -  person chash    schedule 08.07.2020
comment
Хм, понятно, в этом есть смысл... Как мне понять, где буферизуется файл? Кроме того, как вы думаете, нормально ли это видеть в Docker, а не только потому, что я делаю что-то еще за кулисами неправильно?   -  person programmer12    schedule 08.07.2020
comment
Вам нужно будет выяснить, что делает контейнер, или предоставить более подробную информацию об этом, и, возможно, кто-то может помочь. Я не думаю, что проблема имеет какое-либо отношение к Docker.   -  person chash    schedule 08.07.2020


Ответы (1)


Итак, я действительно понял, что происходит, и, как @hmm, предположил, что проблема не в Докере. Местом буферизации была моя память перед загрузкой на диск, и в этом была проблема. Вроде как azcopy (команда копирования Azure) сначала скачивает в память перед сохранением на диск, что совсем не здорово, но с этим ничего не поделаешь в данном случае. Я думаю, что мой подход сам по себе работает полностью.

person programmer12    schedule 08.07.2020