我在AWS EC2上运行了一些docker容器,/var/lib/docker/overlay2文件夹的磁盘大小增长得非常快。
我想知道删除它的内容是否安全?
或者如果docker有某种命令来释放一些磁盘使用。
更新:
我实际上已经尝试了docker系统prune -a,它回收了0Kb。
此外,我的/docker/overlay2磁盘大小比docker系统df的输出大得多
在阅读docker文档和BMitch的回答后,我相信触摸这个文件夹是一个愚蠢的想法,我会尝试其他方法来回收我的磁盘空间。
不要在生产环境中这样做
@ravi-luthra给出的答案在技术上是有效的,但它有一些问题!
在我的例子中,我只是试图恢复磁盘空间。lib/docker/overlay文件夹占用了30GB的空间,我只定期运行几个容器。看起来docker有一些数据泄漏的问题,一些临时数据在容器停止时没有被清除。
所以我删除了lib/docker/overlay文件夹的所有内容。在那之后,我的docker实例变得不可用。当我试图运行或构建任何容器时,它给了我这个错误:
failed to create rwlayer: symlink ../04578d9f8e428b693174c6eb9a80111c907724cc22129761ce14a4c8cb4f1d7c/diff /var/lib/docker/overlay2/l/C3F33OLORAASNIYB3ZDATH2HJ7: no such file or directory
经过反复试验,我通过跑步解决了这个问题
(警告:这将删除docker卷内的所有数据)
docker system prune --volumes -a
所以不建议做这样的脏清理,除非你完全了解系统是如何工作的。
在上面的评论中,人们建议修剪系统,如清除悬空卷,图像,退出容器等,有时你的应用程序成为罪魁祸首,它在很短的时间内产生了太多的日志,如果你使用一个空的目录卷(本地卷),这会填满/var分区。在这种情况下,我发现下面的命令非常有趣,要弄清楚是什么在消耗我的/var分区磁盘上的空间。
du -ahx /var/lib | sort -rh | head -n 30
This command will list top 30, which is consuming most space on a single disk. Means if you are using external storage with your containers, it consumes a lot of time to run du command. This command will not count mount volumes. And is much faster. You will get the exact directories/files which are consuming space. Then you can go to those directories and check which files are useful or not. if these files are required then you can move them to some persistent storage by making change in app to use persistent storage for that location or change location of that files. And for rest you can clear them.
也有快速增长的覆盖2的问题
/var/lib/docker/overlay2 -是docker存储容器可写层的文件夹。
只有当容器停止并删除时,Docker系统修剪-a才能工作。
在我的作品中,我能够通过研究overlay2来计算出什么占用了空间。
该文件夹包含其他命名为哈希的文件夹。每个都有几个文件夹,包括diff文件夹。
Diff文件夹——包含一个容器所写的实际差异,该容器具有与你的容器相同的文件夹结构(至少在我的情况下- ubuntu 18…)
所以我用du -hsc /var/lib/docker/overlay2/ longhashhhhhhh /diff/tmp来找出我的容器中的/tmp是被污染的文件夹。
因此,作为一个解决方案,我已经使用-v /tmp/container-data/tmp:/tmp参数为docker运行命令来映射内部/tmp文件夹到主机,并在主机上设置一个cron来清理该文件夹。
Cron任务很简单:
Sudo nano /etc/crontab
*/30 * * * * root rm -rf /tmp/container-data/tmp/* .使用实例
保存并退出
注意:overlay2是系统docker文件夹,他们可以随时改变它的结构。以上一切都是基于我在里面看到的。不得不进入docker文件夹结构,因为系统完全没有空间,甚至不允许我ssh进入docker容器。