清理 docker/overlay2/ 是否安全

新手上路,请多包涵

我在 AWS EC2 上运行了一些 docker 容器,/var/lib/docker/overlay2 文件夹的磁盘大小增长非常快。

我想知道删除其内容是否安全?或者如果 docker 有某种命令可以释放一些磁盘使用量。


更新:

我实际上已经尝试过 docker system prune -a ,它回收了0Kb。

我的 /docker/overlay2 磁盘大小也远大于 docker system df

在阅读了 docker 文档和 BMitch 的回答后,我认为触摸这个文件夹是一个愚蠢的想法,我会尝试其他方法来回收我的磁盘空间。

原文由 qichao_he 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 3.3k
2 个回答

Docker 使用 /var/lib/docker 来存储您的图像、容器和本地命名卷。删除它可能会导致数据丢失并可能导致引擎停止运行。 overlay2 子目录专门包含图像和容器的各种 文件系统层

要清理未使用的容器和图像,请参阅 docker system prune 。也有删除卷甚至标记图像的选项,但由于可能丢失数据,默认情况下不启用它们:

 $ docker system prune --help

Usage:  docker system prune [OPTIONS]

Remove unused data

Options:
  -a, --all             Remove all unused images not just dangling ones
      --filter filter   Provide filter values (e.g. 'label=<key>=<value>')
  -f, --force           Do not prompt for confirmation
      --volumes         Prune volumes

修剪永远不会删除的内容包括:

  • 正在运行的容器(用 docker ps 列出它们)
  • 登录这些容器(有关限制日志大小的详细信息,请参阅 此帖子
  • 这些容器所做的文件系统更改(通过 docker diff 可见)

此外,在此垃圾收集期间,docker 可能看不到在正常 docker 文件夹之外创建的任何内容。这可能来自其他一些应用程序写入此目录,或 docker 引擎的先前配置(例如,从 AUFS 切换到 overlay2,或者可能在启用用户命名空间之后)。

如果忽略此建议并且您从该文件系统中删除了像 overlay2 这样的单个文件夹会发生什么?容器文件系统由一组文件系统层组装而成,overlay2 文件夹是 docker 执行其中一些挂载的位置(当容器运行时,您将在 mount 的输出中看到它们)。在使用时删除其中一些会从正在运行的容器中删除文件系统的块,并可能会破坏从受影响的映像启动新容器的能力。有关许多可能结果之一,请参阅 此问题


要将 docker 完全刷新到干净状态,您可以删除整个目录, _而不仅仅是像 overlay2 这样的子目录_:

 # danger, read the entire text around this code before running
# you will lose data
sudo -s
systemctl stop docker
rm -rf /var/lib/docker
systemctl start docker
exit

引擎将在完全空的状态下重新启动,这意味着您将失去所有:

  • 图片
  • 容器
  • 命名卷
  • 用户创建的网络
  • 群体状态

原文由 BMitch 发布,翻译遵循 CC BY-SA 4.0 许可协议

我发现这对我最有效:

 docker image prune --all

默认情况下,Docker 不会删除命名图像,即使它们未使用。此命令将删除未使用的图像。

请注意,图像中的每一层都是 /usr/lib/docker/overlay2/ 文件夹中的一个文件夹。

原文由 Sarke 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题