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 포럼에서 추적 중입니다.

커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, Node.js, TypeScript, JavaScript, React를 전문으로 하는 프론트엔드 개발자입니다. 직관적이고 미적으로 뛰어난 사용자 인터페이스를 만드는 데 열정을 가진 그는 최신 프레임워크를 활용하고, 잘 구성되고 시각적으로 매력적인 매뉴얼을 제작하는 것을 즐깁니다.