删除后Docker映像占用空间

问题描述

我提交了一个现有的Docker容器以创建一个新映像,但是提交的映像太大(原始映像为3+ GB,并且在容器中安装了一些其他内容之后,提交的映像为8 + GB )。

我的空间不足,所以我决定删除已提交的映像,但是即使删除已提交的映像,我的磁盘空间也没有增加。但是,当我运行docker system df时,它仅显示应用于原始图像和容器的空间(我只有一个图像和一个容器)。

我可以通过某种方式释放自己确定可以删除的图像的空间吗? (作为参考,我在一个小时内创建了图像,然后将其删除,并且一直在监视我的可用空间,因此,我很确定这是图像,而不是其他占据空间的图像。)

此外,我正在将Windows Docker桌面与WSL2集成在一起使用,因此仅通过/var/lib/docker并检查磁盘使用情况来检查Docker的磁盘使用情况并不容易。

解决方法

由于您在Windows上并且在docker桌面上运行,因此您在VM中实际运行的docker。然后,这取决于将磁盘映像大小设置为什么,通常虚拟磁盘会扩展以填充该空间。

您可以通过以下方法缩小磁盘映像:

  • 停止docker桌面

  • 打开管理员Powershell终端

  • 运行Optimize-VHD -Path "C:\ProgramData\DockerDesktop\vm-data\DockerDesktop.vhdx" -Mode Full,其中路径是docker桌面设置>资源>高级>磁盘映像位置中记录的路径。

  • 启动docker桌面

这将缩小docker虚拟机。

,

我已经使用这些命令将桌面映像从35GB缩小到1GB

(在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中优化磁盘>转到VM,然后检查磁盘

Optimize-VHD -Path "C:\ProgramData\DockerDesktop\vm-data\DockerDesktop.vhdx" -Mode Full

启动docker桌面

现在我有34 + GB的可用磁盘空间

,

我使用以下步骤来清理 docker 空间。

  1. 在 Windows 命令提示符下执行“docker system prune -f”(它说释放 45GB。但是,我能够看到 6GB)。

  2. 打开 Docker 桌面应用程序。

  3. 导航到“疑难解答”菜单并单击“清除/清除数据”按钮。

请注意,这将清除 Docker 中的所有数据。

,

我使用非常大的 docker buildx 缓存遇到了这个问题,我不想修剪所有缓存,因为过滤器参数是 currently broken

PS> docker run -it --rm ubuntu:18.04 df -h
Filesystem      Size  Used Avail Use% Mounted on
overlay         252G  249G    0G 100% /
tmpfs            64M     0   64M   0% /dev
tmpfs           7.9G     0  7.9G   0% /sys/fs/cgroup
shm              64M     0   64M   0% /dev/shm
/dev/sdd        252G  249G    0G 100% /etc/hosts < this is the device we have to expand

记下哪个设备已满。这是您以后必须调整大小的磁盘。

使用 diskpart 扩展虚拟磁盘

WSL2 下并按照 Microsoft 在 expanding the size of your vdisk 上的说明,这应该允许您扩展数据/isocache 安装。

如果您像我一样将您的 Docker vhdxAppData/Packages 中移出并且它没有列在 Docker 桌面 GUI 中,您可以在设置中找到它:

PS> cat $env:APPDATA\Docker\settings.json | Select-String dataFolder
  
    "dataFolder": "D:\\DockerDesktop",

ext4.vhdx 目录下找到 wsl/data 文件(不是 DockerDesktop.vhdx!)使用 diskpart 扩展磁盘。

DISKPART> select vdisk file="D:\DockerDesktop\wsl\data\ext4.vhdx"

DiskPart successfully selected the virtual disk file.

DISKPART> detail vdisk

Device type ID: 0 (Unknown)
Vendor ID: {00000000-0000-0000-0000-000000000000} (Unknown)
State: Added
Virtual size:  256 GB
Physical size:  252 GB
Filename: D:\DockerDesktop\wsl\data\ext4.vhdx
Is Child: No
Parent Filename:
Associated disk#: Not found.

要扩展到 512 GB,请输入以 MB 为单位的大小 (512000) 并退出 diskpart

DISKPART> expand vdisk maximum=512000
DISKPART> exit

在 WSL 中扩展

要允许 Docker 使用额外空间,请启动您的 WSL2 发行版。你不需要为此使用 docker(这是我个人有点困惑的地方)

PS> wsl
user@WSL2:/mnt/c/Users/user$ sudo mount -t devtmpfs none /dev
user@WSL2:/mnt/c/Users/user$ mount | grep ext4

/dev/sdb on / type ext4 (rw,relatime,discard,errors=remount-ro,data=ordered)
/dev/sdd on /mnt/wsl/docker-desktop-data/isocache type ext4 (rw,data=ordered)

isocache/dev/sdd 上(与之前的完整磁盘匹配)。运行 resize2fs 后缀为 sizetype

的新尺寸
sudo resize2fs /dev/<DEVICE> 512000M

检查您是否有更多空间!

docker run -it --rm ubuntu:18.04 df -h


Filesystem      Size  Used Avail Use% Mounted on
overlay         492G  249G  220G  54% /
tmpfs            64M     0   64M   0% /dev
tmpfs           7.9G     0  7.9G   0% /sys/fs/cgroup
shm              64M     0   64M   0% /dev/shm
/dev/sdd        492G  249G  220G  54% /etc/hosts