Administrador de trabajos de impresión en contenedores de Windows

Las aplicaciones con una dependencia en los servicios de impresión se pueden incluir correctamente en contenedores de Windows. Existen requisitos especiales que se deben cumplir para poder habilitar correctamente la funcionalidad del servicio de impresión. En esta guía se explica cómo configurar correctamente tu implementación.

Importante

Aunque el acceso a los servicios de impresión en los contenedores funciona correctamente, la funcionalidad está limitada, es posible que algunas acciones relacionadas con la impresión no funcionen. Por ejemplo, las aplicaciones que dependen de la instalación de controladores de impresora en el host no se pueden incluir en contenedores porque no se admite la instalación de controladores desde un contenedor. Escribe un comentario a continuación si encuentras una característica de impresión no compatible que quieres que se admita en los contenedores.

Instalación

  • El host debe ser Windows Server 2019 o Windows 10 Pro/Enterprise con la actualización de octubre de 2018 o posterior.
  • Las imágenes de mcr.microsoft.com/windows o de mcr.microsoft.com/windows/server deben ser la imagen base de destino. Otras imágenes base de contenedor de Windows (como Nano Server y Windows Server Core) no llevan el rol del servidor de impresión.

Aislamiento de Hyper-V

Se recomienda ejecutar el contenedor con el aislamiento de Hyper-V. Cuando ejecutes en este modo, puedes tener tantos contenedores como quieras ejecutar con acceso a los servicios de impresión. No es necesario modificar el servicio de administrador de trabajos de impresión en el host.

Puedes verificar la funcionalidad con la siguiente consulta de PowerShell:

PS C:\Users\Administrator> docker run -it --isolation hyperv mcr.microsoft.com/windows:1809 powershell.exe
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

PS C:\> Get-Service spooler

Status   Name               DisplayName
------   ----               -----------
Running  spooler            Print Spooler


PS C:\> Get-Printer

Name                           ComputerName    Type         DriverName                PortName        Shared   Published
----                           ------------    ----         ----------                --------        ------   --------
Microsoft XPS Document Writer                  Local        Microsoft XPS Document... PORTPROMPT:     False    False
Microsoft Print to PDF                         Local        Microsoft Print To PDF    PORTPROMPT:     False    False
Fax                                            Local        Microsoft Shared Fax D... SHRFAX:         False    False


PS C:\>

Aislamiento de procesos

Debido a la naturaleza de kernel compartido de los contenedores con aislamiento de procesos, el comportamiento actual limita al usuario a ejecutar solo una instancia del servicio de administrador de trabajos de impresión en el host y en todos sus contenedores secundarios. Si el host tiene en ejecución el administrador de trabajos de impresión, tienes que detener el servicio en el host antes de que intentar iniciar el servicio de impresión en el invitado.

Sugerencia

Si inicias un contenedor y consultas el servicio de administrador de trabajos de impresión tanto en el contenedor como en el host simultáneamente, ambos notificarán su estado como "En ejecución". Pero no te dejes engañar: el contenedor no podrá consultar una lista de las impresoras disponibles. No debes ejecutar el servicio de administrador de trabajos de impresión del host.

Para comprobar si el host está ejecutando el servicio de impresión, usa la consulta de PowerShell siguiente:

PS C:\Users\Administrator> Get-Service spooler

Status   Name               DisplayName
------   ----               -----------
Running  spooler            Print Spooler

PS C:\Users\Administrator>

Para detener el servicio de administrador de trabajos de impresión en el host, usa los siguientes comandos en PowerShell:

Stop-Service spooler
Set-Service spooler -StartupType Disabled

Inicia el contenedor y verifica el acceso a las impresoras.

PS C:\Users\Administrator> docker run -it --isolation process mcr.microsoft.com/windows:1809 powershell.exe
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.


PS C:\> Get-Service spooler

Status   Name               DisplayName
------   ----               -----------
Running  spooler            Print Spooler


PS C:\> Get-Printer

Name                           ComputerName    Type         DriverName                PortName        Shared   Published
----                           ------------    ----         ----------                --------        ------   --------
Microsoft XPS Document Writer                  Local        Microsoft XPS Document... PORTPROMPT:     False    False
Microsoft Print to PDF                         Local        Microsoft Print To PDF    PORTPROMPT:     False    False
Fax                                            Local        Microsoft Shared Fax D... SHRFAX:         False    False


PS C:\>