在 docker 中创建一个强制限制的卷大小限制 - 没有先下载整个大文件然后才说下载失败?

Creating a volume size limit in docker that enforces limit - without first downloading whole huge file and only afterwards saying download failed?

我正在尝试在 docker 中创建容器磁盘大小限制。具体来说,我有一个下载数据的容器,我希望这个数据在一个限制之下,我可以预先设定上限。

到目前为止,我创建的内容在表面层面上有效(防止文件实际保存到计算机上)- 但是我可以看到容器正在工作,我可以看到下载完成到 100%,然后才显示 'Download failed.' 因此它似乎正在下载到一个临时目录,然后在将文件传递到最终位置之前检查文件的大小。 (或不)

这并没有完全解决我试图解决的问题,因为显然下载会消耗大量资源。我不确定我到底错过了什么..

这就是造成上述行为的原因:

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(来自覆盖),但没有帮助。我调查了 docker 个插件,但它们似乎无法解决问题。

这是 Ubuntu 虚拟机中的全部 运行;我制作了一个 zfs 池来测试所有这些。我很确定这不应该发生,因为它不是很有用。有人知道为什么会这样吗?

好的-所以我实际上弄清楚了发生了什么,就像@hmm 所说的那样,问题不是因为Docker。在下载到磁盘之前,它缓冲的地方是我的记忆,这就是问题所在。看起来 azcopy(Azure 的复制命令)在保存到磁盘之前首先下载到内存,这一点都不好,但在这种情况下没有什么可做的。我认为我的方法本身完全有效。