在 Windows Docker 容器上安装 MS Build Tools 失败

shm*_*000 5 visual-c++ docker

我正在尝试为 CI 管道设置 Windows 容器。我的项目使用 C++ 和 CMake,所以我使用的是 Microsoft Build Tools 安装程序。

注意:我不打算在我的项目中使用 .NET 框架的任何部分

不幸的是,在我的 Docker 容器中安装 MS Build Tools 失败,退出代码为 5003,并且没有错误消息。

我一直没能找到这个返回码的解释。我想知道是否有人可以告诉我我做错了什么?

我的 Dockerfile 看起来像这样:

FROM microsoft/windowsservercore:10.0.14393.1480

ADD https://aka.ms/vs/15/release/vs_buildtools.exe  C:\\tmp\\vs-build-tools.exe

RUN C:\\tmp\\vs-build-tools.exe --add Microsoft.VisualStudio.Workload.VCTools --includeRecommended --quiet --passive --norestart --wait --nocache

RUN powershell -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))"
RUN %ALLUSERSPROFILE%\chocolatey\bin\choco.exe install -y git

ENTRYPOINT C:\BuildTools\Common7\Tools\VsDevCmd.bat &&
CMD ["powershell.exe", "-NoLogo", "-ExecutionPolicy", "Bypass"]
Run Code Online (Sandbox Code Playgroud)

我正在用这个批处理脚本构建容器(用户名已被替换):

docker image rm someusername/cmake-msvc
docker build -t someusername/cmake-msvc -m 8g .
docker push someusername/cmake-msvc
Run Code Online (Sandbox Code Playgroud)

我读到这些 Windows 容器需要 大量存储空间,因此我通过设置增加了可用空间storage-opts

"storage-opts": [
    "size=120G"
]
Run Code Online (Sandbox Code Playgroud)

这是我在构建时得到的控制台输出,在构建崩溃之前需要一段时间(我没有计时,但我猜它在 20 到 40 分钟之间):

docker build -t someusername/cmake-msvc -m 8g .
Sending build context to Docker daemon   1.29MB
Step 1/7 : FROM microsoft/windowsservercore:10.0.14393.1480
 ---> 2c42a1b4dea8
Step 2/7 : ADD https://aka.ms/vs/15/release/vs_buildtools.exe   C:\\tmp\\vs-build-tools.exe
Downloading [==================================================>]  1.286MB/1.286MB

 ---> 1891bae28aa1
Step 3/7 : RUN C:\\tmp\\vs-build-tools.exe --add Microsoft.VisualStudio.Workload.VCTools --includeRecommended --quiet --passive --norestart --wait --nocache
 ---> Running in aa6061b7134e
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\HelpFile\1028\help.html...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\HelpFile\2052\help.html...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\HelpFile\1029\help.html...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\HelpFile\1036\help.html...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\HelpFile\3082\help.html...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\HelpFile\1040\help.html...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\HelpFile\1031\help.html...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\HelpFile\1033\help.html...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\HelpFile\1055\help.html...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\HelpFile\1046\help.html...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\HelpFile\1042\help.html...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\HelpFile\1045\help.html...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\HelpFile\1041\help.html...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\HelpFile\1049\help.html...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\vs_setup_bootstrapper.exe...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\Microsoft.Diagnostics.Tracing.EventSource.dll...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\Microsoft.VisualStudio.RemoteControl.dll...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\Microsoft.VisualStudio.Setup.Common.dll...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\Microsoft.VisualStudio.Setup.Configuration.Interop.dll...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\Microsoft.VisualStudio.Setup.dll...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\Microsoft.VisualStudio.Setup.Download.dll...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\Microsoft.VisualStudio.Setup.Engine.dll...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\Microsoft.VisualStudio.Telemetry.dll...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\Microsoft.VisualStudio.Utilities.Internal.dll...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\Newtonsoft.Json.dll...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\zh-Hans\vs_setup_bootstrapper.resources.dll...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\zh-Hant\vs_setup_bootstrapper.resources.dll...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\cs\vs_setup_bootstrapper.resources.dll...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\pt-BR\vs_setup_bootstrapper.resources.dll...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\tr\vs_setup_bootstrapper.resources.dll...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\es\vs_setup_bootstrapper.resources.dll...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\de\vs_setup_bootstrapper.resources.dll...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\fr\vs_setup_bootstrapper.resources.dll...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\it\vs_setup_bootstrapper.resources.dll...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\pl\vs_setup_bootstrapper.resources.dll...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\ko\vs_setup_bootstrapper.resources.dll...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\ja\vs_setup_bootstrapper.resources.dll...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\ru\vs_setup_bootstrapper.resources.dll...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\vs_setup_bootstrapper.config...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\vs_setup_bootstrapper.exe.config...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\detection.json...
Preparing: C:\Users\ContainerAdministrator\AppData\Local\Temp\e86ca78527dcfbd3cf\vs_bootstrapper_d15\vs_setup_bootstrapper.json...
The command 'cmd /S /C C:\\tmp\\vs-build-tools.exe --add Microsoft.VisualStudio.Workload.VCTools --includeRecommended --quiet --passive --norestart --wait --nocache' returned a non-zero code: 5003
Run Code Online (Sandbox Code Playgroud)

我注意到这个 Github 用户遇到了类似的问题,尽管还没有给出答案。我还在MS 开发人员社区上阅读了这篇文章,人们似乎建议使用旧版本或新版本的 windosservercore 映像(此博客文章似乎给出了类似的建议)。这就是为什么我使用10.0.14393.1480,但不幸的是无济于事。

Ole*_*leg 4

我一直使用非零代码 1 作为退出代码,所有内容都与您的退出代码非常相似,这让我感到非常困惑。

对我有帮助的是将对应的行更改为RUN C:\\tmp\\vs-build-tools.exe --add Microsoft.VisualStudio.Workload.VCTools --includeRecommended --quiet --passive --norestart --wait --nocache

RUN C:\\tmp\\vs-build-tools.exe --add Microsoft.VisualStudio.Workload.VCTools --includeRecommended --quiet --passive --norestart --wait --nocache || exit 0
Run Code Online (Sandbox Code Playgroud)

即使失败,也会报告退出代码 0。虽然我完全意识到这通常是一个非常糟糕的主意,但当我运行时,docker run -it build-container cmd我看到我的构建工具已正确安装。

编辑:

您可能还想运行此命令,以安装 VS2017 未安装的任何 SDK 包(您可以从 Microsoft 网站下载 SDK):

RUN powershell -NoProfile -ExecutionPolicy Bypass -Command Start-Process -FilePath "C:\tmp\winsdksetup_17763.exe" -ArgumentList '/Quiet /NoRestart' -Wait

否则,我也可以推荐 Microsoft此处描述的方法来收集安装日志。稍后可以将日志提交给 Microsoft 以获得支持。

一个可能的解决方法是通过 Chocolatey 安装构建工具。我之前使用过以下软件包,我相信您可以找到类似的软件包来满足您的需求:

RUN choco install -y visualstudio2017community --version 15.9.7.0
RUN choco install -y visualstudio2017-workload-nativedesktop
RUN choco install -y visualcpp-build-tools
Run Code Online (Sandbox Code Playgroud)