向现有的 Docker 容器中添加 IronPDF
IronPDF for .NET Standard 现在完全支持 Docker,包括适用于 Linux 和 Windows 的 Azure Docker 容器。
您想将IronPDF部署为单独的Docker容器吗? 了解更多关于IronPdfEngine.





为什么在Azure上使用Docker?
除了出色的企业可扩展性外,Azure 上的 Docker 容器比常规 WebApps 拥有更多权限。
这样就可以渲染 SVG 字体,因为系统访问 GDI+ 图形的功能已启用。
IronPDF 和 Linux 入门
如果 Docker 与 .NET 对您来说是新的,我们推荐这篇优秀的文章关于设置 Docker 调试并与 Visual Studio 项目集成.
我们还强烈建议您阅读我们的IronPDF Linux 安装和兼容性指南
推荐的Linux Docker发行版
我们推荐以下最新的64位Linux操作系统,以便于配置IronPDF。
Ubuntu 22
乌班图 20
Ubuntu 18
Debian 11
Debian 10[目前 Microsoft Azure 默认 Linux 发行版]_
CentOS 8
Amazon AWS Linux 2阅读《IronPDF AWS Lambda 设置指南
我们建议使用Microsoft的官方 Docker 映像 . 其他 Linux 发行版部分支持,但可能需要使用 apt-get 手动配置。 请参阅我们的“Linux 手动设置“指南”
本文件包括适用于Ubuntu和Debian的工作Docker文件:
IronPDF Linux Docker 安装要点
使用针对Linux优化的NuGet包
我们建议使用IronPdf.LinuxNuGet 软件包,而不是常规的IronPdf将包裹保存磁盘空间并避免在启动您的Docker实例时下载资产。 不用担心,即使在Windows或macOS上开发,它依然有效——它只是针对Linux进行了优化。
Install-Package IronPdf.Linux
另一种解决方案是简单地添加IronPdf.Native.Chrome.Linux在常规IronPdfNuGet 软件包。
Install-Package IronPdf.Native.Chrome.Linux
避免自动安装依赖
许多用户报告说,当LinuxAndDockerDependenciesAutoConfig
设置为false时,Linux和Docker的结果更佳。 这是因为所需的先决条件已经通过apt-get样式的包管理器安装在您的Docker文件中了。
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = false;
禁用 GPU 加速
Linux Docker容器通常无法访问GPU。 默认情况下,GPU加速被禁用。 如果您已启用ChromeGpuModes.Enabled,我们强烈建议您在Docker部署中禁用它:
IronPdf.Installation.ChromeGpuMode=IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
“提前”初始化
您也可以选择调用 IronPdf.Installation.Initialize
()手动启动 IronPDF 的方法。 首次使用 Docker 实例运行 IronPDF 时,下载先决条件可能需要一些时间。 我们可以通过在实例创建时调用这段代码来避免这种情况:
IronPdf.Installation.Initialize();
Ubuntu Linux DockerFiles


Ubuntu 22 与 .NET 8
请将用户从'app'更改为'root'。 这将确保库获得足够的权限。 通过这一改变,将不需要为IronCefSubprocess设置'rwx'。
# base image (Ubuntu 22) | |
FROM mcr.microsoft.com/dotnet/runtime:8.0-jammy | |
USER root | |
WORKDIR /app | |
# install necessary packages | |
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 | |
# restore NuGet packages | |
ARG BUILD_CONFIGURATION=Release | |
WORKDIR /src | |
COPY ["Example/Example.csproj", "Example/"] | |
RUN dotnet restore "./Example/./Example.csproj" | |
# build project | |
COPY . . | |
WORKDIR "/src/Example" | |
RUN dotnet build "./Example.csproj" -c $BUILD_CONFIGURATION -o /app/build | |
# publish project | |
RUN dotnet publish "./Example.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false | |
WORKDIR /app/publish | |
# run app | |
ENTRYPOINT ["dotnet", "Example.dll"] |
Ubuntu 22 与 .NET 7
# base image (Ubuntu 22) | |
FROM mcr.microsoft.com/dotnet/sdk:7.0-jammy | |
WORKDIR /src | |
# install necessary packages | |
RUN apt update \ | |
&& apt install -y sudo libc6 libc6-dev libgtk2.0-0 libnss3 libatk-bridge2.0-0 libx11-xcb1 libxcb-dri3-0 libdrm-common libgbm1 libasound2 libxrender1 libfontconfig1 libxshmfence1 libxkbcommon-dev libgdiplus | |
# restore NuGet packages | |
COPY ["Example/Example.csproj", "Example/"] | |
RUN dotnet restore "Example/Example.csproj" | |
# build project | |
COPY . . | |
WORKDIR "/src/Example" | |
RUN dotnet build "Example.csproj" -c Release -o /app/build | |
# publish project | |
RUN dotnet publish "Example.csproj" -c Release -o /app/publish | |
WORKDIR /app/publish | |
# update permissions | |
RUN chmod 775 /app/publish/runtimes/linux-x64/native/IronCefSubprocess | |
# run app | |
ENTRYPOINT ["dotnet", "Example.dll"] |
Ubuntu 20 与 .NET 6
# base image (Ubuntu 20) | |
FROM mcr.microsoft.com/dotnet/sdk:6.0-focal | |
WORKDIR /src | |
# install necessary packages | |
RUN apt update \ | |
&& apt install -y libc6 libc6-dev libgtk2.0-0 libnss3 libatk-bridge2.0-0 libx11-xcb1 libxcb-dri3-0 libdrm-common libgbm1 libasound2 libappindicator3-1 libxrender1 libfontconfig1 libxshmfence1 libgdiplus libva-dev | |
# restore NuGet packages | |
COPY ["Example/Example.csproj", "Example/"] | |
RUN dotnet restore "Example/Example.csproj" | |
# build project | |
COPY . . | |
WORKDIR "/src/Example" | |
RUN dotnet build "Example.csproj" -c Release -o /app/build | |
# publish project | |
RUN dotnet publish "Example.csproj" -c Release -o /app/publish | |
WORKDIR /app/publish | |
# update permissions | |
RUN chmod 775 /app/publish/runtimes/linux-x64/native/IronCefSubprocess | |
# run app | |
ENTRYPOINT ["dotnet", "Example.dll"] |
Ubuntu 20 与 .NET 5
# base image (Ubuntu 20) | |
FROM mcr.microsoft.com/dotnet/sdk:5.0-focal | |
WORKDIR /src | |
# install necessary packages | |
RUN apt update \ | |
&& apt install -y libc6 libc6-dev libgtk2.0-0 libnss3 libatk-bridge2.0-0 libx11-xcb1 libxcb-dri3-0 libdrm-common libgbm1 libasound2 libappindicator3-1 libxrender1 libfontconfig1 libxshmfence1 libgdiplus libva-dev | |
# restore NuGet packages | |
COPY ["Example/Example.csproj", "Example/"] | |
RUN dotnet restore "Example/Example.csproj" | |
# build project | |
COPY . . | |
WORKDIR "/src/Example" | |
RUN dotnet build "Example.csproj" -c Release -o /app/build | |
# publish project | |
RUN dotnet publish "Example.csproj" -c Release -o /app/publish | |
WORKDIR /app/publish | |
# update permissions | |
RUN chmod 775 /app/publish/runtimes/linux-x64/native/IronCefSubprocess | |
# run app | |
ENTRYPOINT ["dotnet", "Example.dll"] |
配备 .NET 3.1 LTS 的 Ubuntu 20
# base image (Ubuntu 20) | |
FROM mcr.microsoft.com/dotnet/sdk:3.1-focal | |
WORKDIR /src | |
# install necessary packages | |
RUN apt update \ | |
&& apt install -y libc6 libc6-dev libgtk2.0-0 libnss3 libatk-bridge2.0-0 libx11-xcb1 libxcb-dri3-0 libdrm-common libgbm1 libasound2 libappindicator3-1 libxrender1 libfontconfig1 libxshmfence1 libgdiplus libva-dev | |
# restore NuGet packages | |
COPY ["Example/Example.csproj", "Example/"] | |
RUN dotnet restore "Example/Example.csproj" | |
# build project | |
COPY . . | |
WORKDIR "/src/Example" | |
RUN dotnet build "Example.csproj" -c Release -o /app/build | |
# publish project | |
RUN dotnet publish "Example.csproj" -c Release -o /app/publish | |
WORKDIR /app/publish | |
# update permissions | |
RUN chmod 775 /app/publish/runtimes/linux-x64/native/IronCefSubprocess | |
# run app | |
ENTRYPOINT ["dotnet", "Example.dll"] |
Ubuntu 18 与 .NET 3.1 LTS
# base image (Ubuntu 18) | |
FROM mcr.microsoft.com/dotnet/sdk:3.1-bionic | |
WORKDIR /src | |
# install necessary packages | |
RUN apt update \ | |
&& apt install -y libc6 libc6-dev libgtk2.0-0 libnss3 libatk-bridge2.0-0 libx11-xcb1 libxcb-dri3-0 libdrm-common libgbm1 libasound2 libappindicator3-1 libxrender1 libfontconfig1 libxshmfence-dev libgdiplus libva-dev | |
# restore NuGet packages | |
COPY ["Example/Example.csproj", "Example/"] | |
RUN dotnet restore "Example/Example.csproj" | |
# build project | |
COPY . . | |
WORKDIR "/src/Example" | |
RUN dotnet build "Example.csproj" -c Release -o /app/build | |
# publish project | |
RUN dotnet publish "Example.csproj" -c Release -o /app/publish | |
WORKDIR /app/publish | |
# update permissions | |
RUN chmod 775 /app/publish/runtimes/linux-x64/native/IronCefSubprocess | |
# run app | |
ENTRYPOINT ["dotnet", "Example.dll"] |
Debian Linux DockerFiles


Debian 12 与 .NET 8
# base image (Debian 12) | |
FROM mcr.microsoft.com/dotnet/sdk:8.0 | |
USER root | |
WORKDIR /app | |
# install necessary packages | |
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 | |
# restore NuGet packages | |
ARG BUILD_CONFIGURATION=Release | |
WORKDIR /src | |
COPY ["Example/Example.csproj", "Example/"] | |
RUN dotnet restore "./Example/./Example.csproj" | |
# build project | |
COPY . . | |
WORKDIR "/src/Example" | |
RUN dotnet build "./Example.csproj" -c $BUILD_CONFIGURATION -o /app/build | |
# publish project | |
RUN dotnet publish "./Example.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false | |
WORKDIR /app/publish | |
# run app | |
ENTRYPOINT ["dotnet", "Example.dll"] |
Debian 11 与 .NET 7
# base image (Debian 11) | |
FROM mcr.microsoft.com/dotnet/sdk:7.0 | |
WORKDIR /src | |
# install necessary packages | |
RUN apt update \ | |
&& apt install -y sudo libc6 libc6-dev libgtk2.0-0 libnss3 libatk-bridge2.0-0 libx11-xcb1 libdrm-common libgbm1 libasound2 libxrender1 libfontconfig1 libxshmfence1 libxkbcommon-dev libgdiplus libva-dev | |
# restore NuGet packages | |
COPY ["Example/Example.csproj", "Example/"] | |
RUN dotnet restore "Example/Example.csproj" | |
# build project | |
COPY . . | |
WORKDIR "/src/Example" | |
RUN dotnet build "Example.csproj" -c Release -o /app/build | |
# publish project | |
RUN dotnet publish "Example.csproj" -c Release -o /app/publish | |
WORKDIR /app/publish | |
# update permissions | |
RUN chmod 775 /app/publish/runtimes/linux-x64/native/IronCefSubprocess | |
# run app | |
ENTRYPOINT ["dotnet", "Example.dll"] |
配备 .NET 6 的 Debian 11
# base image (Debian 11) | |
FROM mcr.microsoft.com/dotnet/sdk:6.0 | |
WORKDIR /src | |
# install necessary packages | |
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 | |
# restore NuGet packages | |
COPY ["Example/Example.csproj", "Example/"] | |
RUN dotnet restore "Example/Example.csproj" | |
# build project | |
COPY . . | |
WORKDIR "/src/Example" | |
RUN dotnet build "Example.csproj" -c Release -o /app/build | |
# publish project | |
RUN dotnet publish "Example.csproj" -c Release -o /app/publish | |
WORKDIR /app/publish | |
# update permissions | |
RUN chmod 775 /app/publish/runtimes/linux-x64/native/IronCefSubprocess | |
# run app | |
ENTRYPOINT ["dotnet", "Example.dll"] |
配备 .NET 5 的 Debian 11
# base image (Debian 11) | |
FROM mcr.microsoft.com/dotnet/sdk:5.0-bullseye-slim | |
WORKDIR /src | |
# install necessary packages | |
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 | |
# restore NuGet packages | |
COPY ["Example/Example.csproj", "Example/"] | |
RUN dotnet restore "Example/Example.csproj" | |
# build project | |
COPY . . | |
WORKDIR "/src/Example" | |
RUN dotnet build "Example.csproj" -c Release -o /app/build | |
# publish project | |
RUN dotnet publish "Example.csproj" -c Release -o /app/publish | |
WORKDIR /app/publish | |
# update permissions | |
RUN chmod 775 /app/publish/runtimes/linux-x64/native/IronCefSubprocess | |
# run app | |
ENTRYPOINT ["dotnet", "Example.dll"] |
配备 .NET 3.1 LTS 的 Debian 11
# base image (Debian 11) | |
FROM mcr.microsoft.com/dotnet/sdk:3.1-bullseye | |
WORKDIR /src | |
# install necessary packages | |
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 | |
# restore NuGet packages | |
COPY ["Example/Example.csproj", "Example/"] | |
RUN dotnet restore "Example/Example.csproj" | |
# build project | |
COPY . . | |
WORKDIR "/src/Example" | |
RUN dotnet build "Example.csproj" -c Release -o /app/build | |
# publish project | |
RUN dotnet publish "Example.csproj" -c Release -o /app/publish | |
WORKDIR /app/publish | |
# update permissions | |
RUN chmod 775 /app/publish/runtimes/linux-x64/native/IronCefSubprocess | |
# run app | |
ENTRYPOINT ["dotnet", "Example.dll"] |
Debian 10 与 .NET 5
# base image (Debian 10) | |
FROM mcr.microsoft.com/dotnet/sdk:5.0 | |
WORKDIR /src | |
# install necessary packages | |
RUN apt update \ | |
&& apt install -y libc6 libc6-dev libgtk2.0-0 libnss3 libatk-bridge2.0-0 libx11-xcb1 libxcb-dri3-0 libdrm-common libgbm1 libasound2 libappindicator3-1 libxrender1 libfontconfig1 libxshmfence1 libgdiplus libva-dev | |
# restore NuGet packages | |
COPY ["Example/Example.csproj", "Example/"] | |
RUN dotnet restore "Example/Example.csproj" | |
# build project | |
COPY . . | |
WORKDIR "/src/Example" | |
RUN dotnet build "Example.csproj" -c Release -o /app/build | |
# publish project | |
RUN dotnet publish "Example.csproj" -c Release -o /app/publish | |
WORKDIR /app/publish | |
# update permissions | |
RUN chmod 775 /app/publish/runtimes/linux-x64/native/IronCefSubprocess | |
# run app | |
ENTRYPOINT ["dotnet", "Example.dll"] |
配备 .NET 3.1 LTS 的 Debian 10
# base image (Debian 10) | |
FROM mcr.microsoft.com/dotnet/sdk:3.1 | |
WORKDIR /src | |
# install necessary packages | |
RUN apt update \ | |
&& apt install -y libc6 libc6-dev libgtk2.0-0 libnss3 libatk-bridge2.0-0 libx11-xcb1 libxcb-dri3-0 libdrm-common libgbm1 libasound2 libappindicator3-1 libxrender1 libfontconfig1 libxshmfence1 libgdiplus libva-dev | |
# restore NuGet packages | |
COPY ["Example/Example.csproj", "Example/"] | |
RUN dotnet restore "Example/Example.csproj" | |
# build project | |
COPY . . | |
WORKDIR "/src/Example" | |
RUN dotnet build "Example.csproj" -c Release -o /app/build | |
# publish project | |
RUN dotnet publish "Example.csproj" -c Release -o /app/publish | |
WORKDIR /app/publish | |
# update permissions | |
RUN chmod 775 /app/publish/runtimes/linux-x64/native/IronCefSubprocess | |
# run app | |
ENTRYPOINT ["dotnet", "Example.dll"] |
Alpine Linux Docker文件
IronPDF在Alpine Linux上运行不受支持。 我们希望我们能,但我们不能。 坦白说,我们喜欢Alpine,并希望这个项目能继续发展和壮大。 截至2023年,Alpine仍在使用过时的“musl” C语言库,这使得Chromium开发者尚未能完全支持这个操作系统。
在 .NET 6 中使用 Alpine Docker 和 IronPdfEngine
IronPdf提供一个包含所有IronPdf功能的容器映像。 这使得在Alpine上运行的项目通过连接到IronPdfEngine容器来访问IronPdf的功能。
步骤1:拉取并运行 IronPdf Engine Docker 镜像
在终端执行以下命令以拉取并运行 IronPdf Engine Docker 镜像:
docker pull ironsoftwareofficial/ironpdfengine
docker run -d -p 33350:33350 ironsoftwareofficial/ironpdfengine
步骤2:设置控制台应用程序
创建一个针对 .NET 6 的新控制台应用程序。
使用 NuGet 包管理器安装 IronPdf.Slim NuGet 包。
IronPDF Windows Docker 容器


Windows Docker 容器在 Azure 上越来越受欢迎,因为它们提供更高的性能和可扩展性,并且赋予开发者更多配置实例的权限。
IronPDF将在Docker容器内实现更吸引人的文本渲染。(Windows 或 Linux)在Azure上,因为可以更高级别地访问图形库和虚拟图形卡。
文章 '适用于 Docker 的 Visual Studio 容器工具'是一个非常好的入门指南。
这是一个用于 .NET Core 3.1 的示例 Windows 容器 Dockerfile。
# escape=` | |
FROM mcr.microsoft.com/windows/servercore:ltsc2016 AS baseOS | |
RUN powershell -Command [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12; $ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue'; Invoke-WebRequest -UseBasicParsing -Uri https://dot.net/v1/dotnet-install.ps1 -OutFile dotnet-install.ps1; ./dotnet-install.ps1 -InstallDir '/Program Files/dotnet' -Channel 3.1 -Runtime dotnet; Remove-Item -Force dotnet-install.ps1 && setx /M PATH "%PATH%;C:\Program Files\dotnet" | |
COPY . . | |
FROM mcr.microsoft.com/dotnet/aspnet:3.1 AS base |
Windows Server 2019 .NET 6.0
预配置的 Windows 容器,包括运行 IronPdf 所需的所有必要依赖项。
请注意
FROM mcr.microsoft.com/dotnet/sdk:6.0-windowsservercore-ltsc2019 AS build
WORKDIR /src
COPY ["nuget.config", "."]
COPY ["ConsoleApp/ConsoleApp.csproj", "ConsoleApp/"]
RUN dotnet restore "ConsoleApp/ConsoleApp.csproj"
COPY . .
WORKDIR "/src/ConsoleApp"
RUN dotnet build "ConsoleApp.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "ConsoleApp.csproj" -c Release -o /app/publish /p:UseAppHost=false
FROM ironsoftwareofficial/windows:2019-net60
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "ConsoleApp.dll"]
访问Docker 存储库探索更多用于运行 IronPdf 的预配置镜像。