Docker for Windows设置mem_limit时出现'The requested resource is in use'错误求助
解决Windows容器设置
mem_limit后启动失败的问题 我之前也碰到过几乎一模一样的情况,折腾了好一阵才摸清楚几个可行的解决方向,你可以按步骤试试:
1. 检查Hyper-V内存分配与服务状态
Windows容器依赖Hyper-V,有时候Hyper-V的内存预留和Docker的容器限制会冲突:
- 打开管理员权限的PowerShell,运行
Get-VMHost查看MemoryReserve和MemoryMaximum参数,确保没有把内存占满的设置; - 尝试重启Hyper-V和Docker服务:
Restart-Service vmms Restart-Service Docker
2. 手动清理自定义data-root下的残留资源
因为你的data-root不是默认路径,Docker的出厂重置不会清理这里的残留文件,这些残留很可能导致资源占用冲突:
- 先停止并删除所有容器:
docker stop $(docker ps -aq) docker rm $(docker ps -aq) - 清理未使用的镜像、卷和网络:
docker system prune -af - 手动前往你的自定义data-root路径(比如
D:\my-docker-data),备份好config文件夹(里面有你的daemon配置),然后清空containers、images、overlay2等文件夹——注意备份重要的容器数据!
3. 调整Docker全局内存配置
单个容器的mem_limit可能和Docker全局的内存分配冲突,试试全局配置:
- 打开Docker Desktop的
Settings -> Resources -> Advanced,给Docker分配合理的总内存(你64GB物理内存的话,分配20-30GB比较合适,别占太满); - 也可以在
daemon.json里添加全局内存限制(路径在你自定义data-root的config文件夹里):
保存后重启Docker,再尝试启动带{ "memory": 20480, "default-runtime": "nano" }mem_limit的容器。
4. 检查Windows系统内存相关设置
Windows的内存压缩或虚拟内存不足也可能触发这个错误:
- 关闭内存压缩:打开管理员PowerShell运行
Disable-MMAgent -mc,重启电脑后再测试; - 调整虚拟内存:打开「控制面板->系统->高级系统设置->性能->设置->高级->虚拟内存」,取消“自动管理所有驱动器的分页文件大小”,手动设置为物理内存的1.5-2倍(比如你64GB内存,设96-128GB),重启生效。
5. 模拟出厂重置但保留自定义data-root
如果上面的方法都不行,你可以手动模拟出厂重置,不用依赖Docker自带的重置功能:
- 停止Docker服务:
Stop-Service Docker; - 备份自定义data-root下的
config文件夹; - 删除data-root下除
config外的所有文件夹; - 把备份的
config放回原位,启动Docker服务:Start-Service Docker。
这样操作后,相当于重置了Docker的运行资源,但保留了你的自定义路径和配置。
内容的提问来源于stack exchange,提问作者VadimG
相关产品推荐
相关产品推荐

