MSBuild.exe Docker Windows 容器冻结
MSBuild.exe on Docker Windows Container freezes
我正尝试在我们的项目中为 运行 Jenkins 设置一个 docker 容器。该解决方案同时包含 C++ 和 .NET Framework 项目。 docker 文件是从这里 here 和几个附加项目中得到利用的。一是我还在 BuildTools 命令中安装了 Microsoft.VisualStudio.Workload.VCTools。
一切似乎都设置得很好,Jenkins 找到了所有必要的工具。但是当我们转到 运行 MSBuild 插件时,整个容器在链接时冻结。我怀疑是内存问题,但这每次都发生在同一个地方。但是,一旦进入此状态,我必须在任务管理器中终止 vmwp 进程以重新启动容器,因为 docker 命令挂起。
运行 容器的 docker 命令是:
docker run --name jenkins --hostname jenkins --network nat --publish 8080:8080 --restart=always -d -v C:\Docker\jenkins\volumes\jenkins_home:C:\JENKINS_HOME --storage-opt "size=128GB" -m 16G --cpus=8 company/jenkins:latest
jenkins 构建过程中冻结前的最后一个命令是 Lib.exe,其中包含所有已生成的 .obj 文件。不过,我在适当的位置看到了在安装的工作区卷上生成的库。
如果我减少进入 .lib 的对象数量,该命令可以正常工作。但是,如果我执行完整的对象列表,它就会挂起。该命令如下所示:
"C:\Program Files (x86)\Microsoft Visual
Studio19\BuildTools\VC\Tools\MSVC.25.28610\bin\Hostx64\x64\lib.exe"
/OUT:"C:\JENKINS_HOME\workspace\MyProgram\build\Release\MyLibrary.lib"
/NOLOGO /MACHINE:X64 /L
TCG C:\JENKINS_HOME\workspace\MyProgram\temp_build\Release\common_interface.obj
...rest of objects...
尝试编译所有对象时,docker 容器上的统计信息:
CONTAINER ID NAME CPU % PRIV WORKING SET NET I/O BLOCK I/O
1b219679b4e6 jenkins 0.02% 2.961GiB 2.79MB / 1.43MB 96.7MB / 1.7GB
我在 docker 容器中手动 运行 MSBuild.exe 并导致相同的行为。我可以 control-C 它然后它响应“正在尝试取消构建...”并继续挂起。此实例中的 docker 容器内存使用量为 2.2GB(任务管理器中的 Vmmem 反映了这一点)。
我的电脑统计信息:
Processor - i9-9900K
Memory - 32GB
OS - Windows 10 Professional
如有任何帮助,我们将不胜感激。
我将容器从 Hyper-V 隔离中取出,并使其成为 windows 新支持的进程隔离并且它起作用了。 运行 命令中使用的标志是:
--isolation=process
想知道为什么 Hyper-V 隔离会导致容器在 link 命令期间冻结...
我正尝试在我们的项目中为 运行 Jenkins 设置一个 docker 容器。该解决方案同时包含 C++ 和 .NET Framework 项目。 docker 文件是从这里 here 和几个附加项目中得到利用的。一是我还在 BuildTools 命令中安装了 Microsoft.VisualStudio.Workload.VCTools。
一切似乎都设置得很好,Jenkins 找到了所有必要的工具。但是当我们转到 运行 MSBuild 插件时,整个容器在链接时冻结。我怀疑是内存问题,但这每次都发生在同一个地方。但是,一旦进入此状态,我必须在任务管理器中终止 vmwp 进程以重新启动容器,因为 docker 命令挂起。
运行 容器的 docker 命令是:
docker run --name jenkins --hostname jenkins --network nat --publish 8080:8080 --restart=always -d -v C:\Docker\jenkins\volumes\jenkins_home:C:\JENKINS_HOME --storage-opt "size=128GB" -m 16G --cpus=8 company/jenkins:latest
jenkins 构建过程中冻结前的最后一个命令是 Lib.exe,其中包含所有已生成的 .obj 文件。不过,我在适当的位置看到了在安装的工作区卷上生成的库。
如果我减少进入 .lib 的对象数量,该命令可以正常工作。但是,如果我执行完整的对象列表,它就会挂起。该命令如下所示:
"C:\Program Files (x86)\Microsoft Visual Studio19\BuildTools\VC\Tools\MSVC.25.28610\bin\Hostx64\x64\lib.exe" /OUT:"C:\JENKINS_HOME\workspace\MyProgram\build\Release\MyLibrary.lib" /NOLOGO /MACHINE:X64 /L TCG C:\JENKINS_HOME\workspace\MyProgram\temp_build\Release\common_interface.obj ...rest of objects...
尝试编译所有对象时,docker 容器上的统计信息:
CONTAINER ID NAME CPU % PRIV WORKING SET NET I/O BLOCK I/O
1b219679b4e6 jenkins 0.02% 2.961GiB 2.79MB / 1.43MB 96.7MB / 1.7GB
我在 docker 容器中手动 运行 MSBuild.exe 并导致相同的行为。我可以 control-C 它然后它响应“正在尝试取消构建...”并继续挂起。此实例中的 docker 容器内存使用量为 2.2GB(任务管理器中的 Vmmem 反映了这一点)。
我的电脑统计信息:
Processor - i9-9900K
Memory - 32GB
OS - Windows 10 Professional
如有任何帮助,我们将不胜感激。
我将容器从 Hyper-V 隔离中取出,并使其成为 windows 新支持的进程隔离并且它起作用了。 运行 命令中使用的标志是:
--isolation=process
想知道为什么 Hyper-V 隔离会导致容器在 link 命令期间冻结...