Linux ARM64でDocker上でIronPDFを実行する
IronPDF のレンダラーは Chromium Embedded Framework (CEF) に基づいており、ARM および ARM64 では Linux の動的リンクがデフォルトで予約するよりも多くのスレッドローカルストレージ (TLS) を必要とします。回避策がない場合、libcef.so の読み込みは cannot allocate memory in static TLS block で失敗します。 修正は、libcef.so を LD_PRELOAD 環境変数を通じてプレロードし、他のものがロードされる前にリンカーが十分な 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フォーラムで追跡されています。

