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

Docker运行.NET Core5+EF+Sqlite应用出现Segmentation fault如何解决

问题根因

该段错误由Alpine镜像使用的musl libc运行库与EF Core 5.0自带的SQLite原生二进制不兼容导致:EF Core 5.0默认绑定的SQLite原生库是针对glibc编译的,在musl环境下执行会触发非法内存访问,也就是抛出的Segmentation fault错误。


可行解决方案

方案1:保留Alpine镜像,修复依赖配置(兼顾小体积需求)

  1. 修改Dockerfile的base阶段,添加系统原生SQLite依赖安装:
FROM mcr.microsoft.com/dotnet/aspnet:5.0-alpine AS base
WORKDIR /app
EXPOSE 80
# 新增以下依赖安装命令
RUN apk add --no-cache sqlite-libs icu-libs
  1. 调整项目包引用:移除原有的Microsoft.EntityFrameworkCore.Sqlite包,改为引用以下两个同版本包,强制EF Core调用系统原生SQLite库:
  • Microsoft.EntityFrameworkCore.Sqlite.Core 5.0.9
  • SQLitePCLRaw.provider.sqlite3.netstandard 2.0.7

修改后重新发布、构建镜像即可正常运行。


方案2:切换非Alpine基础镜像(操作成本最低)

如果不需要Alpine的极小镜像体积,直接修改Dockerfile的基础镜像即可,无需改动项目代码和包引用:

# 移除镜像名后的alpine后缀,使用Debian系标准镜像
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80

# 同步修改sdk镜像为非alpine版本,避免跨编译问题
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src

重新构建镜像后即可直接运行。


方案3:升级EF Core补丁版本

可以尝试将所有EF Core相关依赖升级到.NET 5的最终补丁版本5.0.17,微软在后续的5.0版本补丁中修复过部分Alpine环境下的原生依赖兼容问题,升级后有概率直接解决该问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:36:01