我提交了一个现有的Docker容器来创建一个新的映像,但是提交的映像太大了(原始映像是3+ GB,容器中只安装了一些附加的东西,提交的映像是8+GB)。
我的空间不足,所以我决定删除提交的映像,但即使删除提交的映像,我的磁盘空间也没有增加。然而,当我运行docker system df
时,它只显示了原始映像和容器应该使用的空间(我只有一个映像和一个容器)。
有什么方法可以让我释放我确定仍被我删除的图像占用的空间吗?(作为参考,我创建了图像,然后删除了它,所有这些都在一个小时内完成,并不断地监视我的可用空间,所以我很确定是这个图像而不是其他东西占用了空间。
此外,我使用的是集成了WSL2的Windows Docker桌面,所以通过/var/lib/docker
检查磁盘使用情况并不容易。
8条答案
按热度按时间zwghvu4y1#
我已经使用这些命令将桌面映像从35 GB缩减到1GB
(in windows 10,Docker版本19.03.13)
删除未使用的图像和其他资源
docker system prune -a
删除更多资源
docker volume rm $(docker volume ls -q -f dangling=true)
停止Docker桌面,优化图像
确保HyperV已打开
%windir%\System32\mmc.exe "%windir%\System32\virtmgmt.msc"
或在成功搜索中键入Hyper-V在GUI中优化磁盘〉转到虚拟机并检查磁盘
Optimize-VHD -Path "C:\ProgramData\DockerDesktop\vm-data\DockerDesktop.vhdx" -Mode Full
启动Docker桌面
现在我有34 GB以上的可用磁盘空间
使用Docker桌面应用程序进行清理
单击标题中的错误图标,然后单击清除/清除数据,即可清除数据。
“清理/清除数据”选项不会删除wsl集成。
gzjq41n42#
如果尝试执行Optimize-VHD时出现错误:
您可以改用
diskpart
:rlcwz9us3#
此代码可用作提升的PowerShell会话的快速修复。我必须使用 pwsh,因为它可以在没有临时文件的情况下与 diskpart 一起正常工作。
dgtucam14#
因为你是在windows上运行docker for desktop,所以你实际上是在虚拟机上运行docker。然后这取决于磁盘映像大小设置为什么,通常虚拟磁盘会扩展以填充该空间。
你可以缩小一个磁盘映像虽然:
Optimize-VHD -Path "C:\ProgramData\DockerDesktop\vm-data\DockerDesktop.vhdx" -Mode Full
,其中path是Docker桌面设置〉资源〉高级〉磁盘映像位置中记录的路径。这将缩小Docker虚拟机。
xdnvmnnf5#
我使用以下步骤清洁Docker空间。
1.在Windows命令提示符下执行了“Docker System Prune -f”(它说释放45 GB。然而,我能够看到6 GB)。
1.已打开Docker桌面应用程序。
1.导航至“故障排除”菜单并点击“清理/清除数据”按钮。
请注意,这将清除Docker中的所有数据。
uplii1fm6#
如果您在Windows上使用Docker Desktop,backend Hyper-V和NOT wsl 2(以管理员身份在PowerShell中运行):
我的PowerShell脚本
DockerDesktopVM_cleanup.ps1
每3天运行一次,Windows Task Scheduler
在本地服务器上(windows 10 x64 ltsc 1809)。4xrmg8kj7#
我在使用非常大的
docker buildx
缓存时遇到了这种情况,由于filter参数是currently broken,所以我不想删除所有缓存使用
diskpart
扩展虚拟磁盘在
WSL2
下,按照Microsoft关于扩展虚拟磁盘大小的说明,这应该允许您扩展data/isocache挂载。如果您和我一样,将Docker
vhdx
从AppData/Packages
中移出,但未在Docker Desktop GUI中列出,您可以在设置中找到它:在
wsl/data
目录下找到ext4.vhdx
文件(不是DockerDesktop.vhdx
!)使用diskpart
扩展磁盘。要扩展到512 GB,请输入大小(MB)(512000)并退出diskpart
在WSL中展开
为了允许Docker使用额外的空间,启动您的WSL 2发行版。您不需要为此使用Docker(这是我个人有点困惑的地方)
isocache
位于/dev/sdd
上(与之前的已满磁盘匹配)。使用以sizetype为后缀的新大小运行resize2fs
检查您是否有更多空间!
lhcgjxsq8#
如果您看到"拒绝访问",即使您以"管理员"权限启动powershell。这可能意味着您的当前用户不是管理员。例如,如果您使用Microsoft帐户,则您的本地管理员是另一个用户。因此,您需要将您的当前会话用户添加到vhdx文件权限-"完全控制"。此外,您可以在此处找到如何修复vhdx访问相关问题的方法:https://stackoverflow.com/a/73070459/5966911
然后,您可以启动命令,没有任何问题(但首先备份vhdx):
优化-VHD-路径C:\程序数据\坞站桌面\虚拟机数据\坞站桌面. vhdx-完全模式
此外,在您需要正常停止"Docker Descktop"之前(即任何虚拟机都不应在Taskmanager中运行或挂起,如vmwp.exe)
请参见此处的起源:删除后Docker图像占用空间
如果Optimze-VHD或compact命令对您不起作用,并且您的virgual磁盘包含linux文件系统,您可以通过df看到该磁盘的可用空间(可用空间)。因此,您可能需要在压缩之前将空白空间清零(优化-VHD或压缩)。要进行零位调整,可以使用不同的方法。例如,在Docker的任何容器内使用此命令(风险自担)(因为默认情况下,容器与Docker主机系统动态共享磁盘大小):
在出现错误消息后,运行以下命令:
http://www.netreliant.com/news/8/17/Compacting-VirtualBox-Disk-Images-Linux-Guests.html
或者从这里开始:https://www.altaro.com/hyper-v/compact-vhdx-linux-filesystem/或也适用于我从这里:https://stackoverflow.com/a/60450188/5966911
归零后,您可以使用Optimize-VHD或diskpart应用工具https://stackoverflow.com/a/60450188/5966911重复此"练习