Hyper-V后端的Docker Desktop无图形资源设置项,须通过PowerShell手动配置MobyLinuxVM内存(如Set-VMMemory),并重启Docker Desktop服务及客户端才能生效。

Hyper-V后端的Docker Desktop没有图形界面资源设置项
Windows上启用Hyper-V后端的Docker Desktop(非WSL2)不提供Settings → Resources这类GUI配置入口。这是关键前提——你无法像在WSL2模式下那样直接拖动滑块调内存。所有资源限制必须通过修改Hyper-V虚拟机配置实现,否则Docker Desktop会默认占用高达4GB甚至更多内存,且无法被系统回收。
手动修改Hyper-V虚拟机内存需用PowerShell命令
Hyper-V后端下,Docker Desktop实际运行在一个名为 MobyLinuxVM 的专用虚拟机中。调整它的内存不是改Docker设置,而是操作Hyper-V本身:
- 以管理员身份打开PowerShell
- 执行
Get-VM -Name "MobyLinuxVM"确认该VM存在且处于关机状态(若正在运行,先执行Stop-VM -Name "MobyLinuxVM") - 设置启动内存为3GB:
Set-VMMemory -VMName "MobyLinuxVM" -MinimumBytes 1GB -MaximumBytes 3GB -StartupBytes 3GB - 重启VM:
Start-VM -Name "MobyLinuxVM"
注意:不能只设 StartupBytes;必须同时指定 MinimumBytes 和 MaximumBytes,否则Docker Desktop启动时会报错或回退到默认值。
docker run -m 对Hyper-V后端容器无效?不,它有效但受限于VM总内存
你在 docker run 中加的 --memory=2g 或 docker-compose.yml 里的 mem_limit: 2g 依然起作用,但它只是容器级软/硬限制,上限受制于 MobyLinuxVM 的总可用内存。例如:VM只配了2.5GB,那即使给MySQL容器设 --memory=3g,它也根本起不来,docker logs 会显示 cannot allocate memory 或直接退出码137。
典型错误现象包括:
-
docker stats显示某容器RSS接近2GB,但整体宿主机内存压力不大,而Docker Desktop进程却占满3GB+ - 容器反复重启,
docker ps -a显示Exited (137),但docker inspect查不到OOMKilled字段(说明是VM层OOM,不是容器内OOM)
改完内存后必须重启Docker Desktop服务链
仅重启 MobyLinuxVM 不够。Docker Desktop客户端依赖一系列Windows服务协同工作,包括 Docker Desktop Service 和 com.docker.service。遗漏这步会导致新内存配置不生效,或出现“Docker is starting…”卡死。
完整收尾动作:
- 执行
Restart-Service "Docker Desktop Service" - 右键任务栏Docker图标 → Quit Docker Desktop
- 重新启动Docker Desktop应用
- 验证:
docker info | findstr "TotalMemory"应返回接近你设定的VM内存值(如3.00GiB)
最容易被忽略的是服务重启和客户端完全退出——很多人只重启VM就以为完成了,结果第二天发现内存又悄悄涨回去了。











