为什么删除docker容器和图像不会释放Windows上的存储空间?怎么解决?

Tho*_*ran 7 windows virtualbox docker

问题:

当我下载并运行容器时,它们会占用越来越多的空间.我找到了清理未使用的容器和图像的建议,我这样做了.你猜怎么着?他们吃掉了更多的磁盘空间!

到目前为止我发现了什么:

它与.docker\machine\machines\default\disk.vmdk文件有关.它只会变大!

disk.vmdk的日志:

                            size (MB)
1. with 2 images                1,376
2. downloading a new image X    ?
3. running X as Y               2,963
4. removing Y                   2,963
5. removing X                   3,106
6. removing all the images      3,126
Run Code Online (Sandbox Code Playgroud)

到目前为止我发现的唯一修复是运行docker-machine rm default删除VM.问题是我必须再次下载所有图像.应该有一个更好的解决方案.有人能解释一下:

  1. 到底是怎么回事?
  2. 怎么解决?

Shi*_*Jha 40

在 Windows 10 上,这是一个主要问题,空间没有释放,即使在我运行之后,docker system prune当我每周发现这一点时,我也开始注意到这一点;我的 SSD 每 2 或 3 GB 空间就被填满。

尝试打开 Docker Desktop,点击 UI 右上角的“故障排除”图标,然后单击“清理/清除数据”。这为我收回了空间。

另请参阅:

  1. Windows 10:Docker 在删除所有镜像和容器后不释放磁盘空间 #244
  2. Hyper V 用户界面问题修复
  3. 清除 Hyper-V 识别未使用的扇区
  4. Linux 不断增长的 docker 大小问题修复

  • 运行该疑难解答程序后,我的 SSD 可用空间从 37 GB 增加到 54 GB。几天前还运行了“docker system prune”。谢谢你的提示。 (3认同)

sha*_*359 18

在使用 wsl2 的 Windows 上,请按照以下步骤操作。请注意,如果您遵循此操作,您将丢失所有 docker 映像和容器。 如果您想保留数据(图像和容器),那么您可以尝试此线程上其他人提到的修剪选项。

找到 docker 存储数据的 vhdx 文件。这是docker使用的虚拟硬盘。

"P:\Users\your-username\AppData\Local\Docker\wsl\data\ext4.vhdx"
Run Code Online (Sandbox Code Playgroud)

就我而言,docker 在该文件中使用了大约 27GB 的磁盘空间。即使删除所有映像和容器后,docker 也不会将可用磁盘空间释放回操作系统。 在此输入图像描述

要回收磁盘空间,您必须尝试从 GUI 中清除/清除数据选项。当提示输入数据集名称时,选择 WSL 2。这应该会清理并归还所有未使用的空间。

如果 docker 守护进程未启动或磁盘空间未减少,那么最后一个选项是从 docker 桌面 GUI 恢复出厂设置,如下所示。 在此输入图像描述

  • 清理/清除数据对我来说很有效。`docker system prune`没有帮助 (3认同)

Arn*_*eil 11

您可以在较新版本的 Docker 上运行维护命令。它们将释放被停止容器、悬空图像和悬空卷使用的空间:

docker container prune -f
docker image prune -f
docker volume prune -f
Run Code Online (Sandbox Code Playgroud)

  • 请注意,默认情况下“docker system prune”实际上并不删除卷。要同时删除卷,您应该使用:“docker system prune --volumes”。 (9认同)
  • 还有一种组合:docker system prune (4认同)

小智 7

Docker 缓存:Docker 使用缓存来缩短构建时间并优化映像分层。缓存在镜像构建过程中存储中间层。当您删除映像时,Docker 可能仍保留缓存的层,这会消耗磁盘空间。

要清理 Docker 缓存,可以使用 docker system prune 命令。此命令删除未使用的数据,包括缓存的层。请小心,因为它还会删除其他未使用的资源,例如容器和网络。

docker system prune
Run Code Online (Sandbox Code Playgroud)

此外,如果您只想专门清理缓存的镜像数据,可以使用 docker builder prune 命令:

docker builder prune
Run Code Online (Sandbox Code Playgroud)

通过使用上述方法,您可以确保清理未使用的卷和 Docker 缓存,从而释放 Linux 系统上的存储空间。

  • 命令“docker system prune”实际上足以完成任务,它实际上删除了所有缓存,包括“悬挂构建缓存”,这是由“docker builder prune”命令删除的。 (2认同)

Alk*_*ris 6

也许您正在使用的图像使用卷。如果他们这样做,那么删除容器并不能解决问题。您还必须删除这些卷。为此,您必须-v在删除容器时指定标志

docker rm -v <container name or container id>
Run Code Online (Sandbox Code Playgroud)

根据您的 docker 版本,您将有更多可用命令。检查此SO 线程以了解更多信息。您可以在此SO 线程中阅读有关孤立卷的更多信息


Meh*_*aki 6

使用以下命令删除所有不需要的容器和图像后:

  • Docker容器rm
  • Docker 镜像 rm
  • Docker 容器修剪
  • Docker 镜像修剪
  • Docker 卷修剪

我看不到任何磁盘空间被释放。重新启动 Docker 桌面后发现磁盘空间被释放。

  • 很高兴知道。我删除了一个巨大的镜像,但只有在重新启动 Docker 后我才恢复了磁盘空间。 (2认同)
  • 为我工作。在 Linux 上重新启动 docker 的命令:`sudo systemctl daemon-reload`、`sudo systemctl restart docker` https://docs.docker.com/config/daemon/systemd/ (2认同)

小智 5

如果有人在 Ubuntu 上遇到这个问题:

就我而言,使用 docker 命令进行修剪和删除并没有多大帮助。

问题是docker/overlay2文件夹。

febrin@laptop:/var/lib$ sudo du -sh docker/overlay2
361G    docker/overlay2
Run Code Online (Sandbox Code Playgroud)

我不得不手动删除它。