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

如何在M3芯片Mac的Docker容器中运行.NET 8 Azure Functions

解决MacBook Air M3上Docker运行Azure Functions的500错误问题

问题分析

你遇到的PAL_SEHException和退出码134(SIGABRT),核心原因是架构适配冲突(M3为arm64架构,依赖Rosetta模拟amd64环境),加上原Dockerfile存在冗余依赖、环境变量配置错误等问题共同导致。

简化且可正常运行的Dockerfile

# 构建阶段:使用多平台.NET SDK镜像,明确目标架构为amd64
FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:8.0 AS build
ARG BUILD_CONFIGURATION=Debug
ARG TARGETARCH=amd64  # 强制指定目标架构,适配Rosetta模拟环境

WORKDIR /src
# 复制项目文件并还原依赖
COPY ["PdfUploader/PdfUploader.csproj", "PdfUploader/"]
COPY ["Domain/Domain.csproj", "Domain/"]
COPY ["SharedKernel/SharedKernel.csproj", "SharedKernel/"]
COPY ["Infrastructure/Infrastructure.csproj", "Infrastructure/"]

RUN dotnet restore "PdfUploader/PdfUploader.csproj" -a $TARGETARCH

# 复制源码并构建
COPY . .
WORKDIR "/src/PdfUploader"
RUN dotnet build "PdfUploader.csproj" -a $TARGETARCH -c $BUILD_CONFIGURATION -o /app/build

# 发布阶段
FROM build AS publish
ARG BUILD_CONFIGURATION=Debug
RUN dotnet publish "PdfUploader.csproj" -a $TARGETARCH -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false

# 运行阶段:使用官方Azure Functions隔离运行时镜像(amd64)
FROM --platform=linux/amd64 mcr.microsoft.com/azure-functions/dotnet-isolated:4-dotnet-isolated8.0 AS final

WORKDIR /app
# 复制发布产物
COPY --from=publish /app/publish .

# 配置Azure Functions环境变量(移除多余转义引号)
ENV FUNCTIONS_WORKER_RUNTIME=dotnet-isolated
ENV WEBSITE_USE_PLACEHOLDER_DOTNETISOLATED=0
ENV AzureWebJobsStorage=xxx
ENV AppConfigConnection=xxx
ENV ENVIRONMENT=Development
ENV ServiceBusConnection=xxx
ENV EventHubConnection=xxx
ENV SignalRConnection=xxx

# 暴露函数服务端口
EXPOSE 7071

# 启动函数应用
ENTRYPOINT ["func", "start", "--dotnet-isolated"]

关键修改说明

  • 强制架构对齐:在构建和运行阶段均指定--platform=linux/amd64,确保镜像完全适配Rosetta模拟的amd64环境,从根源避免架构不匹配导致的运行时异常。
  • 移除冗余依赖:原Dockerfile中安装的nodejs和azure-functions-core-tools属于多余内容——官方azure-functions/dotnet-isolated镜像已内置必要的函数运行工具,无需额外安装,减少冲突风险。
  • 修复环境变量:删除环境变量值中的转义引号(比如\"dotnet-isolated\"改为dotnet-isolated),避免配置解析错误。
  • 简化权限配置:暂时移除自定义UID/GID配置,使用镜像默认权限,减少权限相关的潜在问题(若后续有特殊权限需求可再添加)。

构建与运行命令

  1. 构建镜像(明确指定目标平台):
docker build --platform=linux/amd64 -t pdfuploader-func .
  1. 运行容器:
docker run -p 7071:7071 pdfuploader-func

调整后即可解决运行时异常,让Azure Functions在Docker中正常执行函数逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 22:02:33