在 Docker 中運行 IronPDF 於 Linux ARM64

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 的解決方法,請參閱IronPDF 在 Linux ARM 上:無法在靜態 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 Forum 上進行追蹤。

Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

除了開發,Curtis對物聯網(IoT)有濃厚的興趣,探索創新的方法來整合硬體和軟體。在空閒時間,他喜歡玩遊戲和建立Discord機器人,結合他對技術的熱愛與創造力。

準備開始了嗎?
Nuget 下載 20,296,129 | 版本: 2026.7 剛剛發布
Still Scrolling Icon

還在捲動嗎?

想快速獲得證明嗎? PM > Install-Package IronPdf
執行範例 看您的HTML變成PDF。