在Docker上运行Linux ARM64版IronPDF

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronPDF 的渲染器基于 Chromium Embedded Framework (CEF),它需要比 Linux 动态链接器默认在 ARM 和 ARM64 上预留的更多线程本地存储(TLS)。没有解决方法的话,加载 libcef.so 会在 cannot allocate memory in static TLS block 时失败。 解决方法是通过 LD_PRELOAD 环境变量预加载 libcef.so,以便链接器在加载其他任何内容之前预留足够的 TLS。

有关裸错误消息和非Docker修复的详细信息,请参阅Linux ARM上IronPDF:无法在静态TLS块中分配内存。 本文适用于在容器内应用同样的修复。

在Dockerfile中设置LD_PRELOAD

将变量添加为 ENV 指令,指向 IronPDF 附带的 ARM64 本机库:

ENV LD_PRELOAD=/app/runtimes/linux-arm64/native/libcef.so

示例Dockerfile

这个多阶段 Dockerfile 在 .NET 8 上为 ARM64 构建并运行 IronPDF 应用,安装 CEF 所依赖的本机库,并在最终映像中设置 LD_PRELOAD

# Base image for runtime (ARM64)
FROM mcr.microsoft.com/dotnet/runtime:8.0 AS base
USER root
WORKDIR /app
RUN apt update \
    && apt install -y sudo libxkbcommon-x11-0 libc6 libc6-dev libgtk2.0-0 libnss3 libatk-bridge2.0-0 libx11-xcb1 libxcb-dri3-0 libdrm-common libgbm1 libasound2 libxrender1 libfontconfig1 libxshmfence1 libgdiplus libva-dev
# Base image for build (ARM64)
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY . .
RUN dotnet publish -c Release -o /app/publish
# Final image with IronPdf and system dependencies
FROM base AS final
WORKDIR /app
ENV LD_PRELOAD=/app/runtimes/linux-arm64/native/libcef.so
COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "IronPdfLinuxArm.dll"]

LD_PRELOAD 设置为 libcef.so 实际落在您镜像中的路径; 上面的值与默认的 runtimes/linux-arm64/native/ 布局匹配。 基础限制在CEF论坛上得到追踪。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。

准备开始了吗?
Nuget 下载 20,296,129 | 版本: 2026.7 刚刚发布
Still Scrolling Icon

还在滚动吗?

想快速获得证据? PM > Install-Package IronPdf
运行示例看着你的HTML代码变成PDF文件。