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

在.NET 6 Alpine Linux容器部署SkiaSharp遇运行时错误求助

.NET 6.0部署SkiaSharp到Alpine Linux容器运行失败问题及解决办法

问题现象

运行阶段出现失败,错误信息如下:

System.TypeInitializationException: 'SkiaSharp.SKImageInfo'的类型初始值设定项引发异常。
---> System.DllNotFoundException: 无法加载共享库'libSkiaSharp'或其依赖项。若要诊断加载问题,可设置LD_DEBUG环境变量:liblibSkiaSharp: 无法打开共享对象文件: 没有该文件或目录
at SkiaSharp.SkiaApi.sk_colortype_get_default_8888()
at SkiaSharp.SKImageInfo..cctor()
--- 内部异常堆栈跟踪结束 ---
at ZXing.SkiaSharp.Rendering.SKBitmapRenderer.Render(BitMatrix matrix, BarcodeFormat format, String content, EncodingOptions options)
at ZXing.BarcodeWriter`1.Write(String contents)

已尝试的无效方案

  • 添加SkiaSharp.NativeAssets.Linux引用
  • 替换为SkiaSharp.NativeAssets.Linux.NoDepedencies引用
  • 替换为StoneCold.SkiaSharp.NativeAssets.AlpineLinux引用
  • 将版本从2.88.3回退到2.80.3
  • 复制libSkiaSharp.so到/usr/lib/目录
  • 将发布目录添加到LD_LIBRARY_PATH

项目文件片段

<ItemGroup>
    <PackageReference Include="SkiaSharp" Version="2.80.3" />
    <PackageReference Include="SkiaSharp.NativeAssets.Linux" Version="2.80.3" />
    ...
  </ItemGroup>

原Dockerfile(简化版)

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app

FROM mcr.microsoft.com/dotnet/sdk:6.0-alpine AS build
WORKDIR /src
COPY . .
WORKDIR "/src/Web"
RUN dotnet build "Web.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "Web.csproj" -c Release -o /app/publish -r alpine-x64 --no-self-contained

FROM base AS final
RUN apt-get update \
    && apt-get install -y libfontconfig1 fontconfig \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* \
    && export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/app/publish/
WORKDIR /app
COPY --from=publish /app/publish .
COPY --from=publish /app/publish/libSkiaSharp.so /usr/lib/
ENV ASPNETCORE_URLS=http://*:5000 
ENTRYPOINT ["dotnet", "Web.dll"]

可行解决方案(感谢@omajid)

FROM mcr.microsoft.com/dotnet/aspnet:6.0-alpine AS base
WORKDIR /app

FROM mcr.microsoft.com/dotnet/sdk:6.0-alpine AS build
WORKDIR /src
COPY . .
WORKDIR "/src/Web"
RUN dotnet build "Web.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "Web.csproj" -c Release -o /app/publish -r linux-musl-x64 --no-self-contained

FROM base AS final
RUN apk update \
    && apk --no-cache add icu-libs fontconfig ttf-dejavu
WORKDIR /app
COPY --from=publish /app/publish .
ENV ASPNETCORE_URLS=http://*:5000 
ENV DOTNET_RUNNING_IN_CONTAINER=true
ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false
ENTRYPOINT ["dotnet", "Web.dll"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:26:17