我有一个循环的 python 脚本
- 将视频 block 从 AWS S3 下载到/filename。
- 按顺序排列文件并将它们连接起来。
- 将整个处理后的视频文件上传到 AWS S3。
- 删除文件夹/文件名。
然后继续循环,直到 AWS SQS 队列为空。
脚本很棒!我已经运行了几个月。硬盘空间会有所不同,但不会达到 5% 左右,具体取决于视频的大小。
我决定将这个脚本放在一个 docker 容器中并运行 docker-compose 这样我就可以一次运行一堆。
问题是硬盘满了!我知道运行 5 时磁盘上的空间会更大,但是当我完成处理后,文件会被删除。
但是有了docker,好像就是缓存什么的。我执行每个容器,它们运行良好。删除旧文件和所有文件。
不知道在 docker 容器中和作为服务运行之间的区别会对 HD 产生什么影响。
除此之外,当我“rm”docker 容器时,硬盘空间就会释放出来。我运行“docker ps -s”,容器上的空间并不大。就像当你在 docker 容器中“rm”一个文件时,它从来没有真正“rm”它。
最佳答案
如果您将图像下载到不是从主机映射的卷目录,则 docker 容器将不会释放已使用的磁盘空间,直到容器被删除——容器中所做的任何事情都是短暂的,但主机不会不知道容器内部发生的事情的状态。
从这个意义上说,它很像一个虚拟机镜像,由一个根据需要增长但从不缩小的文件提供支持。 Docker 有一个用于运行容器跟踪更改的目录。在主机上,您可以在 /var/lib/docker/containers/<id>
中找到支持正在运行的容器的文件。
如果您需要您的容器共享磁盘空间,我建议您将共享卷从主机映射到每个 docker 容器镜像中以进行共享。
尝试以下操作
docker run -ti -v /host/dir:/container/dir ubuntu bash
以上将以终端交互模式运行 ubuntu 镜像并挂载主机目录 /host/dir
在运行的容器内。容器写入 /container/dir
的任何内容将出现在主机/host/dir
以及安装它的任何其他容器也会看到更改。
只要记住在共享卷中所做的任何事情都会被安装它的所有容器看到,所以在从它添加和删除文件/目录时要小心!
关于python - Docker容器不断增长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36969395/