Docker에서 Linux ARM64에서 IronPDF 실행
IronPDF의 렌더러는 Chromium Embedded Framework (CEF)를 기반으로 구축되었으며, 이는 기본적으로 ARM 및 ARM64에서 Linux 동적 링커가 예약하는 것보다 더 많은 스레드 로컬 저장소 (TLS)를 필요로 합니다. 해결책이 없으면 libcef.so 로드에 실패하며 cannot allocate memory in static TLS block가 발생합니다. 수정 방법은 libcef.so를 LD_PRELOAD 환경 변수를 통해 사전 로드하여 링커가 다른 것이 로드되기 전에 충분한 TLS를 예약하도록 하는 것입니다.
오류 메시지 및 non-Docker 해결책에 대해 더 알고 싶다면 IronPDF on Linux ARM: 정적 TLS 블록에 메모리를 할당할 수 없음를 참조하십시오. 이 글은 같은 해결책을 컨테이너 내에 적용합니다.
Dockerfile에서 LD_PRELOAD 설정
변수를 IronPDF와 함께 제공되는 ARM64 네이티브 라이브러리를 가리키는 ENV 명령어로 추가합니다:
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 포럼에서 추적 중입니다.

