Docker容器不断增长

时间:2016-05-01 17:04:50

标签: python amazon-web-services docker docker-compose

我有一个循环上的pyhton脚本

  1. 将视频块从AWS S3下载到/ filename
  2. 按顺序对文件进行排序并对其进行连接。
  3. 将整个已处理的视频文件上传到AWS S3
  4. 删除文件夹/文件名
  5. 然后继续循环,直到AWS SQS队列为空。

    脚本很棒!我跑了几个月。硬盘空间各不相同,但从未达到5%左右,具体取决于视频的大小。

    我决定将这个脚本放在一个docker容器中并运行docker-compose,这样我就可以一次运行一堆这样的脚本。

    问题是硬盘充满了!我知道用5运行磁盘上的空间会被雇用,但是当我完成处理文件后会被删除。

    但是对于docker,似乎是一个缓存或什么的。我执行到每个容器,他们运行正常。删除旧文件和所有文件。

    不知道docker容器和作为服务运行之间的区别会对HD造成影响。

    任何方向都会很棒。

    添加到此。当我" rm" Docker容器硬盘驱动器空间释放。我运行一个docker ps -s并且容器上的空间并不疯狂。就像你和他妈的#34;在docker容器中的一个文件,它永远不会真正发送它。

2 个答案:

答案 0 :(得分:5)

如果您将图像下载到未从主机映射的目录中,则在卸载容器之前,docker容器不会释放已用过的磁盘空间 - 容器中完成的任何操作都是短暂的,但是HOST我不知道容器内部的状态。

从这个意义上说,它很像一个虚拟机映像,由一个根据需要增长的文件支持,但从不收缩。 Docker有一个运行容器跟踪更改的目录。在主机上,您可以在/var/lib/docker/containers/<id>

中找到支持正在运行的容器的文件

如果您需要容器共享磁盘空间,我建议您将主机中的共享卷映射到要共享的每个docker容器映像中。

尝试以下

 docker run -ti -v /host/dir:/container/dir ubuntu bash

以上将在终端交互模式下运行ubuntu映像,并将主机的目录/host/dir挂载到正在运行的容器中。容器写入/container/dir的任何内容都将显示在主机/host/dir中,安装它的任何其他容器也会看到更改。

请记住,挂载它的所有容器都会看到共享卷中所做的任何事情,所以在添加和删除文件/目录时要小心!

答案 1 :(得分:1)

我建议您使用卷,并将这些卷装入容器中。卷的更改是即时的,而不是对容器文件系统所做的更改(在删除容器之前不会真正删除)。

查看docs here