Windows Docker容器sandbox.vhdx持续膨胀,寻求排查方法
Windows Docker容器sandbox.vhdx磁盘膨胀排查方法
检查VHDX的稀疏属性与实际占用
- 用PowerShell查看VHDX的逻辑大小和实际磁盘占用:
Get-VHD -Path "C:\ProgramData\Docker\containers\<容器ID>\sandbox.vhdx" | Select-Object Path, Size, FileSize - 区分
Size(逻辑分配空间)和FileSize(实际磁盘占用),若FileSize持续增长,说明磁盘确实被占用而非仅逻辑空间分配。
- 用PowerShell查看VHDX的逻辑大小和实际磁盘占用:
排查容器内未释放的文件句柄
- 容器内应用删除文件但未关闭句柄会导致VHDX无法回收空间,在容器内执行:
Get-Process | ForEach-Object { Get-ProcessHandle -Id $_.Id } | Where-Object { $_.FileName -like "*deleted*" } - 或在宿主机用Process Monitor过滤容器对应进程(如wincat.exe或容器进程的宿主机PID),查找已删除但仍被占用的文件。
- 容器内应用删除文件但未关闭句柄会导致VHDX无法回收空间,在容器内执行:
检查Docker的镜像/容器层空间占用
- 执行命令查看容器层空间详情:
docker system df -v - 用
docker inspect <容器ID>查看容器的Mounts和GraphDriver信息,确认是否有未清理的挂载卷或匿名卷。
- 执行命令查看容器层空间详情:
排查容器内页面文件膨胀
- 检查容器内页面文件大小:
Get-WmiObject -Class Win32_PageFileUsage - 若页面文件持续增长,可通过容器启动参数
--memory-swap <限制值>限制交换空间,或禁用页面文件。
- 检查容器内页面文件大小:
检查宿主机卷影副本/快照
- 宿主机卷影副本可能锁定VHDX导致无法回收空间,执行命令查看快照:
vssadmin list shadows - 清理针对Docker存储目录的不必要快照。
- 宿主机卷影副本可能锁定VHDX导致无法回收空间,执行命令查看快照:
触发Docker存储驱动的空间回收
- 强制清理无用资源:
docker system prune -af - 手动优化VHDX回收空间:
Optimize-VHD -Path "C:\ProgramData\Docker\containers\<容器ID>\sandbox.vhdx" -Mode Full
- 强制清理无用资源:
内容的提问来源于stack exchange,提问作者Jan Biddle
相关产品推荐
相关产品推荐

