在 Docker 中運行 IronPDF 於 Linux ARM64
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 上進行追蹤。

