Docker'da Linux ARM64 üzerinde IronPDF Çalıştırma
IronPDF'nin işleyicisi, Chromium Embedded Framework (CEF) üzerine kurulmuştur ve bu, ARM ve ARM64'te Linux dinamik bağlayıcısının varsayılan olarak ayırdığından daha fazla Thread Local Storage (TLS) gerektirir. Bir çözüm olmadan, libcef.so yükleme işlemi cannot allocate memory in static TLS block ile başarısız olur. Çözüm, bağlayıcının başka bir şey yüklemeden önce yeterli TLS ayırabilmesi için libcef.so önceden yüklenmesi ve LD_PRELOAD ortam değişkeni üzerinden gerçekleştirilmesidir.
Temel hata mesajı ve Docker olmayan düzeltme için, IronPDF Linux ARM: statik TLS bloğunda bellek tahsis edilemiyor sayfasına bakın. Bu makale, bir kapsayıcı içinde aynı düzeltmeyi uygular.
Dockerfile İçinde LD_PRELOAD Ayarlama
Değişkeni, IronPDF ile birlikte gelen ARM64 yerel kütüphanesini işaret eden bir ENV talimatı olarak ekleyin:
ENV LD_PRELOAD=/app/runtimes/linux-arm64/native/libcef.so
Örnek Dockerfile
Bu çok aşamalı Dockerfile, ARM64 için .NET 8 üzerinde bir IronPDF uygulaması oluşturur ve çalıştırır, CEF'in bağlı olduğu yerel kütüphaneleri kurar ve son görüntüde LD_PRELOAD ayarlar:
# 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 fiilen görüntünüze ulaştığı yola ayarlayın; yukarıdaki değer, varsayılan runtimes/linux-arm64/native/ düzeniyle eşleşir. Temel sınırlama CEF Forum'da takip edilmektedir.

