Docker docs状态:
警告:请勿直接操纵
/var/lib/docker/
中的任何文件或目录。这些文件和目录由Docker管理。
假设某人尚未阅读该提示,并从/var/lib/docker/aufs/diff
删除了一些文件以释放一些磁盘空间。这些文件不存在于 Docker卷中,也不属于原始 Docker映像的一部分,而是在容器可写层中创建的。重新启动给定的容器可以释放磁盘空间,但是有任何已知的副作用吗?
下一次:是否通过容器docker exec .. rm ..从容器内删除了此类文件或目录会导致正确的删除,还是仅将它们标记为已删除?文档目前没有描述这种特殊情况。
答案 0 :(得分:1)
重新启动给定的容器会释放磁盘空间,但是有任何已知的副作用吗?
如您在问题中所述,您不应“操纵/ var / lib / docker /中的任何文件或目录” ,因为可能会出现任何副作用,并且没有文档可以追踪到任何与此相关的内容:这是内部Docker管道,可能会极大地改变其他Docker版本,因此我们不应将其暴露给最终用户,也不要对其进行调和。您可以查看适用于您的Docker版本的Docker代码及其所有依赖项,以了解发生了什么,但这并不是很实际的:-)
有任何已知的副作用吗?
可能会有副作用-我坚持 may ,因为根据您的Docker版本和配置,可能会发生任何事情。即使它似乎可行,也可能会破坏某些功能。
众所周知的副作用是Docker安装损坏,它可能以各种方式出现:随机容器崩溃,数据丢失,无法解释的错误等。
从容器内删除此类文件或目录(通过docker exec .. rm ..)是否导致正确删除,还是仅将它们标记为已删除?
在容器中删除文件并不总是将其从系统中删除,这取决于您使用的驱动器。 Doc有一节介绍如何为所有文件编写文件:
在容器内删除文件时,将在容器层中创建白化文件。图像层中文件的版本不会被删除[...]随后对同一文件的写入将对已经复制到容器中的文件副本进行操作。
如果容器创建文件然后将其删除,则此操作在Btrfs文件系统本身中执行,并回收空间。
如果您使用的是
direct-lvm
,则释放块。如果您使用loop-lvm
,则可能无法释放这些块
在容器中删除文件时,会在容器中创建白化文件(updir)。图片层(lowerdir)中的文件版本未删除
如果在容器的可写层中创建然后删除文件或目录,则zpool将回收这些块。
文档目前没有描述这种特殊情况。
是的,可能不会;)