You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求可用Windows C++原生应用CI/CD构建Docker镜像及CMake生成器建议

Windows CI/CD C++构建Docker镜像问题解决方案

问题背景

需要构建用于CI/CD的Windows Docker镜像,仅通过CMake和命令行工具完成C++应用构建,无需Visual Studio GUI。使用微软官方文档提供的Dockerfile时,出现curl命令相关的构建错误,需解决以下问题:

  1. curl是否包含在官方Windows Server Core镜像中?
  2. 可用的正确Dockerfile示例?
  3. 适合此类场景的CMake生成器推荐?

问题解答

1. curl是否存在于官方Windows Server Core镜像中?

官方mcr.microsoft.com/windows/servercore:ltsc2022镜像默认不预装curl,这是命令执行失败的核心原因。同时原Dockerfile存在换行语法错误:RUN指令后的换行未正确连接命令,导致Docker将curl识别为独立指令而非RUN的一部分,直接触发构建报错。

2. 修正后的Dockerfile示例

以下是适配Windows Server Core ltsc2022的Dockerfile,解决了工具缺失和语法问题,同时安装C++构建所需的核心组件:

# escape=`

FROM mcr.microsoft.com/windows/servercore:ltsc2022

# 切换到PowerShell执行后续命令,避免cmd环境的工具缺失问题
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]

RUN `
    # 使用PowerShell下载VS Build Tools引导程序
    Invoke-WebRequest -Uri 'https://aka.ms/vs/17/release/vs_buildtools.exe' -OutFile 'vs_buildtools.exe'; `
    # 安装C++构建核心工作负载及必要组件
    Start-Process -FilePath .\vs_buildtools.exe -ArgumentList `
        '--quiet', '--wait', '--norestart', '--nocache', `
        '--installPath', 'C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools', `
        '--add', 'Microsoft.VisualStudio.Workload.VCTools', `
        '--add', 'Microsoft.VisualStudio.Component.VC.CMake.Project', `
        '--add', 'Microsoft.VisualStudio.Component.Windows11SDK.22621', `
        '--remove', 'Microsoft.VisualStudio.Component.Windows10SDK.10240', `
        '--remove', 'Microsoft.VisualStudio.Component.Windows10SDK.10586', `
        '--remove', 'Microsoft.VisualStudio.Component.Windows10SDK.14393', `
        '--remove', 'Microsoft.VisualStudio.Component.Windows81SDK' `
        -NoNewWindow -Wait; `
    # 清理安装文件,减小镜像体积
    Remove-Item -Path .\vs_buildtools.exe -Force;

# 设置入口点,启动VS开发命令提示符后进入PowerShell
ENTRYPOINT ["cmd", "/S", "/C", "\"C:\\Program Files (x86)\\Microsoft Visual Studio\\2022\\BuildTools\\Common7\\Tools\\VsDevCmd.bat\" && powershell.exe -NoLogo -ExecutionPolicy Bypass"]

说明:

  • 切换为PowerShell作为默认Shell,规避cmd环境下的工具缺失问题
  • 替换原Azure工作负载为Microsoft.VisualStudio.Workload.VCTools(C++构建核心依赖)
  • 添加CMake组件,确保CMake能正确识别构建环境
  • 使用Start-Process替代cmd的start命令,适配PowerShell执行逻辑

3. 推荐的CMake生成器

针对该CI/CD场景,推荐两种生成器:

  • Visual Studio 17 2022:最适配Visual Studio Build Tools的生成器,无需额外安装工具,直接调用MSBuild构建,兼容性拉满,适合绝大多数C++项目,CI/CD中无需额外配置环境。
  • Ninja:若追求极致构建速度可选用,但需在Dockerfile中额外安装Ninja工具(可通过Chocolatey或手动下载),适合大规模项目或对构建效率要求极高的场景。

内容的提问来源于stack exchange,提问作者Kérdezősködő Indián

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 23:27:02