Windows的docker删除容器后WSL2磁盘空间不释放的问题的解决方法

 更新时间:2024年12月27日 10:46:50   作者:HBLOG  
很多同学拉取镜像使用一段时间后发现 C 盘快满了,把之前用过的镜像和容器删除,发现 WSL 挂载目录的虚拟磁盘大小没有变化,非常的奇怪,所以本文介绍了Windows的docker删除容器后WSL2磁盘空间不释放的问题的解决方法,需要的朋友可以参考下

1、起因及原因

很多同学拉取镜像使用一段时间后发现 C 盘快满了,把之前用过的镜像和容器删除,发现 WSL 挂载目录的虚拟磁盘大小没有变化,非常的奇怪。 其实,不同于 WSL1,WSL2 本质上是虚拟机,所以 Windows 会自动创建 vhdx 后缀的虚拟磁盘文件作为存储。这个 vhdx 后缀的虚拟磁盘文件特点是可以自动扩容,但是一般不会自动缩容。一旦有很多文件把它“撑大”,即使把这些文件删除它也不会自动“缩小”。所以删除文件后还需要我们手动进行压缩才能释放磁盘空间。

2、解决

2.1 找到要压缩的虚拟磁盘文件

如果你没更改挂载磁盘的位置,那他位置在 C:\Users\<你当前用户名>\AppData\Local\Docker\wsl\data\ext4.vhdx ,记下路径,后面要用到。

2.2 关闭 Docker Desktop

在任务栏右下角右键单击 Docker Desktop 图标关闭 Docker 桌面,选择退出 Docker 桌面,等一会 Docker 图标没了之后,就证明 Docker 完全关闭了,然后,打开命令提示符:我们就能能够看到,确保两个状态都已停止。

wsl --list -v

如果这一步没关闭也没问题,最后所有操作结束后,重启 Docker Desktop 即可。

2.3 压缩虚拟磁盘文件

在 PowerShell 中执行:

# 关闭 WSL2 中的 linux distributions
wsl --shutdown
# 运行管理计算机的驱动器的 DiskPart 命令
diskpart

会新打开一个叫 DiskPart 的命令窗口,如下图:

在新打开的 DiskPart 命令窗口中执行:

# 选择虚拟磁盘文件
select vdisk file="就是步骤2.1虚拟磁盘文件的路径"
# 压缩文件
compact vdisk
# 压缩完毕后卸载磁盘
detach vdisk

上述操作执行完毕,WSL2 删除文件后空出来的磁盘空间就被释放了,可以去虚拟磁盘文件的路径看到 ext4.vhdx 文件大小已经减小。最后打开 Docker Desktop 可以看到原来镜像还在,成功解决问题。

3. 常见的 Docker 清理命令

在 Docker 中,可以使用以下命令来清理未使用的资源,包括未使用的镜像、容器和网络:

docker system prune -a

这将删除所有停止的容器、未使用的网络和未使用的镜像。请注意,这个命令会删除所有未使用的资源,因此请确保你不再需要这些资源。

以上就是Windows的docker删除容器后WSL2磁盘空间不释放的问题的解决方法的详细内容,更多关于docker WSL2磁盘空间不释放的资料请关注脚本之家其它相关文章!

相关文章

  • Docker系列之使用Docker Compose编排容器

    Docker系列之使用Docker Compose编排容器

    Docker Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器,这篇文章主要介绍了Docker系列之使用Docker Compose编排容器,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • 浅谈docker的上下文和工作目录

    浅谈docker的上下文和工作目录

    在编写Dockerfile时我们总会接触到COPY上下文和工作目录,有时候这些位置搞不清楚,本文就来介绍一下docker的上下文和工作目录,感兴趣的可以了解一下
    2025-09-09
  • 使用Docker配置redis sentinel哨兵的方法步骤

    使用Docker配置redis sentinel哨兵的方法步骤

    本文主要介绍了Docker配置redis sentinel哨兵的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Docker 集成KingBase的详细过程

    Docker 集成KingBase的详细过程

    这篇文章主要介绍了Docker 集成KingBase的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-04-04
  • 在Docker容器中运行Nginx的详细教程

    在Docker容器中运行Nginx的详细教程

    Nginx 是一款高性能 Web 服务器,常被用作反向代理、负载均衡器以及内容缓存,当你将 Nginx 运行在 Docker 容器中时,还能进一步获得可移植性、快速部署和更整洁的管理体验,本教程将带你从零开始学习如何使用 Docker 部署 Nginx,需要的朋友可以参考下
    2025-10-10
  • Redis快速部署为Docker容器的实现方法

    Redis快速部署为Docker容器的实现方法

    本文主要介绍了Redis快速部署为Docker容器的实现方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • Docker方式启动tomcat访问首页出现404错误

    Docker方式启动tomcat访问首页出现404错误

    这篇文章主要介绍了Docker方式启动tomcat访问首页出现404错误。文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Docker 跨主机容器间相互访问的实现

    Docker 跨主机容器间相互访问的实现

    本文主要介绍了Docker 跨主机容器间相互访问的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • docker比赛提交常用命令小结

    docker比赛提交常用命令小结

    这篇文章主要介绍了docker比赛提交常用命令小结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • Ubuntu使用Docker部署Redis并实现远程访问本地数据库全过程

    Ubuntu使用Docker部署Redis并实现远程访问本地数据库全过程

    这篇文章主要给大家介绍了关于Ubuntu使用Docker部署Redis并实现远程访问本地数据库的相关资料,Redis远程连接是指通过网络连接到Redis服务器,从而可以在不同的机器问和操作Redis数据库,需要的朋友可以参考下
    2024-03-03

最新评论