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

升级至.NET 7后Docker构建镜像时出现Segmentation fault错误

解决M1 Mac上.NET 7 Docker构建Segmentation fault问题

问题概述

将项目从.NET 6升级至.NET 7后,本地执行dotnet publish命令正常,但通过Docker构建linux/amd64镜像时,发布步骤抛出Segmentation fault错误,回退至.NET 6后问题消失。

环境信息

  • 设备:搭载M1芯片的Mac
  • 构建参数:已传入--platform linux/amd64指定目标架构
  • Docker基础镜像:mcr.microsoft.com/dotnet/sdk:7.0(曾尝试bullseye-slim变体,问题未解决)

相关配置与错误输出

Dockerfile发布步骤

RUN dotnet publish \
    -c release \
    -r linux-x64 \
    --no-self-contained \
    -p:PublishReadyToRun=true \
    -o published \
    function/function.csproj

错误输出

#26 4.225 MSBuild version 17.4.0+18d5aef85 for .NET
#26 6.047 qemu: uncaught target signal 11 (Segmentation fault) - core dumped
#26 6.438 Segmentation fault

可行解决方案

  • 禁用PublishReadyToRun编译选项:该选项生成的提前编译二进制文件,在qemu模拟amd64架构时易触发兼容性崩溃。修改发布命令,移除-p:PublishReadyToRun=true或改为-p:PublishReadyToRun=false:
    RUN dotnet publish \
        -c release \
        -r linux-x64 \
        --no-self-contained \
        -o published \
        function/function.csproj
    
  • 使用ARM64架构镜像构建:避免qemu跨架构模拟,改用适配M1芯片的ARM64 SDK镜像作为builder,再通过Docker Buildx构建多平台镜像:
    FROM mcr.microsoft.com/dotnet/sdk:7.0-arm64v8 as builder
    # 后续发布步骤保持不变
    
    构建命令示例:
    docker buildx build --platform linux/amd64,linux/arm64 -t your-image:tag .
    
  • 更新Docker Desktop:Docker自带的qemu版本可能存在.NET 7兼容问题,更新至最新版Docker Desktop可获取修复后的qemu组件,解决架构模拟时的崩溃问题。
  • 指定.NET 7 SDK的更新版本:尝试使用较新的.NET 7 SDK镜像(如mcr.microsoft.com/dotnet/sdk:7.0.200及以上),官方后续版本可能修复了跨架构构建的相关bug。

内容的提问来源于stack exchange,提问作者Goncalo Oliveira

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 02:15:42