Añadir IronPDF a un contenedor Docker existente
IronPDF for .NET Standard ahora es totalmente compatible con Docker, incluidos Azure Docker Containers para Linux y Windows.
¿Desea desplegar IronPDF como un contenedor Docker independiente? Más informaciónla guía de tutoriales del motor IronPDF.





¿Por qué utilizar Docker en Azure?
Además de una excelente escalabilidad empresarial, los contenedores Docker en Azure disfrutan de más permisos que las aplicaciones web normales.
Esto permite renderizar fuentes SVG, ya que el acceso del sistema a los gráficos GDI+ está habilitado.
Introducción a IronPDF y Linux
Si Docker con .NET es nuevo para usted, le recomendamos este excelente artículo sobreconfiguración de la depuración e integración de Docker con proyectos de Visual Studio.
También le recomendamos encarecidamente que lea nuestroGuía de instalación y compatibilidad de IronPDF con Linux
Distribuciones Linux Docker recomendadas
Recomendamos a continuación los últimos sistemas operativos Linux de 64 bits para una "configuración sencilla" de IronPDF.
- Ubuntu 22
- Ubuntu 20
- Ubuntu 18
- Debian 11
- Debian 10 [Actualmente la distribución Linux predeterminada de Microsoft Azure]
- CentOS 8
Amazon AWS Linux 2Lea la Guía de configuración de IronPDF AWS Lambda
Recomendamos utilizar la aplicación de MicrosoftImágenes Docker oficiales para .NET . Otras distribuciones de Linux son compatibles en parte, pero pueden requerir una configuración manual mediante apt-get. Consulte nuestro "Configuración manual de Linux"Guía
En este documento se incluyen archivos Docker de trabajo para Ubuntu y Debian:
Fundamentos de la instalación de IronPDF Linux Docker
Utilizar paquetes NuGet optimizados para Linux
Recomendamos utilizar elIronPdf.Linux NuGet Package en lugar delIronPDF Package para ahorrar espacio en disco y evitar que se descarguen activos al iniciar su instancia de Docker. No te preocupes, sigue funcionando cuando se desarrolla en Windows o macOS - sólo está optimizado para Linux.
Install-Package IronPdf.Linux
Otra solución es añadir simplementeIronPdf.Native.Chrome.Linux además de las habitualesIronPDF Paquete NuGet.
Install-Package IronPdf.Native.Chrome.Linux
Evite la instalación automática de dependencias
Muchos usuarios informan de mejores resultados con Linux y Docker cuando LinuxAndDockerDependenciesAutoConfig
está en false. Esto se debe a que los requisitos previos ya están instalados por los gestores de paquetes de estilo apt-get ya en sus archivos Docker.
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = false;
Desactivar la aceleración de la GPU
Los contenedores Docker de Linux no suelen tener acceso a una GPU. La aceleración de la GPU está desactivada por defecto. Si ha activado ChromeGpuModes.Enabled, le recomendamos encarecidamente que lo desactive para implementaciones Docker:
IronPdf.Installation.ChromeGpuMode=IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
"Inicialización "anticipada
Opcionalmente, también puede llamar al comando IronPdf.Installation.Initialize()
método para iniciar manualmente IronPDF. La primera vez que una instancia Docker utiliza IronPDF, puede tardar algún tiempo en descargar los requisitos previos. Podemos evitar ese escenario llamando a este código cuando se crea la instancia:
IronPdf.Installation.Initialize();
Ubuntu Linux DockerFiles


Ubuntu 22 con .NET 8
# 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 con .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 con .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 con .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"] |
Ubuntu 20 con .NET 3.1 LTS
# 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 con .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 con .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 con .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"] |
Debian 11 con .NET 6
# 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"] |
Debian 11 con .NET 5
# 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"] |
Debian 11 con .NET 3.1 LTS
# 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 con .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"] |
Debian 10 con .NET 3.1 LTS
# 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 DockerFiles
No es posible ejecutar IronPDF en Alpine Linux. Ojalá pudiéramos, pero no podemos. Francamente, nos gusta Alpine y esperamos que este proyecto continúe y crezca. A fecha de 2023, Alpine sigue utilizando bibliotecas de lenguaje C "musl" obsoletas que no permiten aún a los desarrolladores de Chromium dar pleno soporte a este sistema operativo.
Uso de Alpine Docker con IronPdfEngine en .NET 6
IronPdf proporciona una imagen contenedora que contiene todas las funcionalidades de IronPdf. Esto permite a los proyectos que se ejecutan en Alpine acceder a las funcionalidades de IronPdf conectándose a un contenedor IronPdfEngine.
Paso 1: Extraer y ejecutar la imagen Docker del motor IronPdf
Ejecute los siguientes comandos en su terminal para extraer y ejecutar la imagen Docker del motor IronPdf:
docker pull ironsoftwareofficial/ironpdfengine
docker run -d -p 33350:33350 ironsoftwareofficial/ironpdfengine
Paso 2: Configurar la aplicación de consola
Cree una nueva aplicación de consola orientada a .NET 6.
Instale el paquete NuGet IronPdf.Slim mediante el gestor de paquetes NuGet.
Contenedores Docker de IronPDF para Windows


Los contenedores Docker de Windows son cada vez más populares en Azure, ya que ofrecen mayores niveles de rendimiento y escalabilidad, y dan a los desarrolladores más permisos para configurar las instancias.
IronPDF realizará un renderizado de texto más atractivo dentro de un contenedor Docker(Windows o Linux) en Azure debido a los mayores niveles de acceso a la biblioteca de gráficos y a la tarjeta gráfica virtual.
El artículo 'Herramientas de Visual Studio para contenedores Dockeres una magnífica guía para empezar.
Este es un ejemplo de contenedor Windows Dockerfile para .NET Core 3.1
# 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
Contenedores Windows preconfigurados que incluyen todas las dependencias necesarias para ejecutar IronPdf.
Atención
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"]
Visite elRepositorio Docker de IronSoftware en Docker Hub para explorar otras imágenes preconfiguradas para ejecutar IronPdf.