docker - Aspose Word v18.8.0 中的“SkiaSharp.SKImageInfo”异常

标签 docker dockerfile alpine aspose aspose.words

使用 Aspose Word (v18.8.0) 将文档转换为 PDF。当我尝试使用 Linux(Alpine)在 docker 容器中执行时,代码在 Visual Studio 中运行良好,它抛出了上述异常

FROM mcr.microsoft.com/dotnet/core/sdk:3.0.100-alpine3.9 AS build-env
WORKDIR /usr/src/app
COPY . .
RUN dotnet publish ./test/test.csproj -c Release -o ./_publish
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0.0-alpine3.9

RUN apk update
RUN apk upgrade --available

RUN apk add libgdiplus --update-cache --repository http://dl-3.alpinelinux.org/alpine/edge/testing/ --allow-untrusted
RUN apk --no-cache add msttcorefonts-installer fontconfig freetype-dev libjpeg-turbo-dev libpng-dev && \
    update-ms-fonts && \
    fc-cache -f

RUN apk add Goelze.SkiaSharp.NativeAssets.AlpineLinux --version 1.68.0
RUN apk add --no-cache icu-libs
ENV LC_ALL en_US.UTF-8
ENV LANG en_US.UTF-8

ENV ASPNETCORE_URLS http://+:5000
WORKDIR /app
COPY --from=build-env /usr/src/app/_publish ./
EXPOSE 5000/tcp
CMD ["dotnet", "test.dll"]

错误:
Connection id "0HLRQ2FV5QQ5J", Request id "0HLRQ2FV5QQ5J:00000001": An unhandled exception was thrown by the application.
System.TypeInitializationException: The type initializer for   ' threw an exception.
 ---> System.TypeInitializationException: The type initializer for 'SkiaSharp.SKImageInfo' threw an exception.
 ---> System.DllNotFoundException: Unable to load shared library 'libSkiaSharp' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: Error loading shared library liblibSkiaSharp: No such file or directory
   at SkiaSharp.SkiaApi.sk_colortype_get_default_8888()
   at SkiaSharp.SKImageInfo..cctor()

最佳答案

Aspose.Words 18.8 使用 SkiaSharp 1.60.3 版本。 Goelze.SkiaSharp.NativeAssets.AlpineLinux 需要 SkiaSharp 1.68.0 或更高版本。您应该更新到 Aspose.Words 19.2.0 版本(在此版本中使用了 SkiaSharp 的 1.68.0 版本)。或者到最新版本,它使用 1.68.1 版本的 SkiaSharp。

您必须为 SkiaSharp 添加 Linux native Assets 才能使其在 Linux Alpine 中运行。将 Nuget 引用添加到 Goelze.SkiaSharp.NativeAssets.AlpineLinux .也不要忘记安装字体配置 在你的容器中。 SkiaSharp 要求使用字体。这是我用于在 Linux Alpine 容器中测试 Aspose.Words 的 Dockerfile。

FROM mcr.microsoft.com/dotnet/core/sdk:2.2-alpine3.9 AS build
WORKDIR /app

# copy csproj and restore as distinct layers
COPY Aspose.Words.Docker.Sample/*.csproj ./Aspose.Words.Docker.Sample/
WORKDIR /app/Aspose.Words.Docker.Sample
RUN dotnet restore

# copy and publish app and libraries
WORKDIR /app/
COPY Aspose.Words.Docker.Sample/. ./Aspose.Words.Docker.Sample/
WORKDIR /app/Aspose.Words.Docker.Sample
RUN dotnet publish -c Release -o out

# copy to runtime environment
FROM mcr.microsoft.com/dotnet/core/runtime:2.2-alpine3.9 AS runtime
WORKDIR /app
# fontconfig is required to properly work with fonts in Linux.
RUN apk update && apk upgrade && apk add fontconfig
COPY --from=build /app/Aspose.Words.Docker.Sample/out ./
ENTRYPOINT ["dotnet", "Aspose.Words.Docker.Sample.dll"]

注意,Goelze.SkiaSharp.NativeAssets.AlpineLinux为 Alpine Linux 3.9 编译,不适用于 3.8。

披露:我在 Aspose.Words 团队工作。

关于docker - Aspose Word v18.8.0 中的“SkiaSharp.SKImageInfo”异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59208166/

相关文章:

php - Docker:从一个容器中的应用程序和服务器登录

docker - 在 Jenkins 代理 docker 镜像(使用 Kubernetes 插件)中运行 karma 测试时,ChromeHeadless 挂起

node.js - Docker NodeJS Puppeteer@2.0.0-如何修复无法启动Chrome!问题

docker - 作为 alpine 容器中的非 root 用户的 Vault 开发模式初始化错误 :/dev/null/. Vault 不是目录

postgresql - Docker化PostgreSQL

docker - 无法在 Docker 上运行 dotnet core 2.1 项目

docker - 你能理解 Docker 的错误信息吗?

java - Docker:无法从 Spring Boot docker 镜像连接到 Elasticsearch

docker - dotnet还原命令和Dockerfile始终以异常结束

docker - 为什么AWS ECS Fargate在Jupyter Notebook服务器容器中不显示任何文件?