Docker构建执行msbuild触发OutOfMemoryException,求排查方案
解决Docker中MSBuild编译OutOfMemoryException问题
排查细节获取方案
- 增强MSBuild日志输出:修改
msbuild命令,添加/flp:v=diag;logfile=msbuild_diag.log参数,编译完成后从构建容器导出日志文件,查看内存相关的调用栈和资源占用细节 - 实时监控容器内存:执行构建时用
docker stats查看容器内存占用峰值,确认是否是容器内存配额不足导致 - 升级编译器版本:Microsoft.Net.Compilers 3.3.1存在已知内存占用问题,尝试升级到4.x及以上版本,修改项目包引用后重新构建
直接修复尝试
- 调整容器内存配额:构建时执行
docker build --memory 4g --memory-swap -1(根据实际需求调整内存值),给容器分配更多内存 - 修改编译参数:添加
/p:BuildParallel=false关闭并行编译,减少内存并发占用;或临时添加/p:Optimize=false关闭代码优化,排查是否是优化阶段触发内存溢出 - 清理冗余文件:在Dockerfile的COPY步骤前,添加命令删除项目目录下的bin、obj文件夹及无关文件,减少容器内文件占用的额外内存
额外修正
你的Dockerfile最后用dotnet命令启动.NET Framework项目是错误的,.NET Framework项目需通过IIS托管,正确的配置应移除现有ENTRYPOINT,或改为:
ENTRYPOINT ["C:\\ServiceMonitor.exe", "w3svc"]
内容的提问来源于stack exchange,提问作者DevSay
相关产品推荐
相关产品推荐

