Administrador de trabajos de impresión en contenedores de Windows

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

Importante

Aunque obtener acceso a los servicios de impresión correctamente en contenedores funciona, la funcionalidad está limitada en forma; 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 dentro de un contenedor. Abra un comentario a continuación si encuentra una característica de impresión no compatible que quiera admitir en los contenedores.

Configuración

  • El host debe ser Windows Server 2019 o Windows 10 Pro/Enterprise, actualización de octubre de 2018 o posterior.
  • Use la imagen base de para contenedores de Windows o la imagen base de para contenedores de Windows Server. Otras imágenes base de contenedor de Windows (como Nano Server y Windows Server Core) no llevan el rol de servidor de impresión.

Hyper-V Aislamiento

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

Puede comprobar 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 del 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 en cola de impresora en todo el host y todos sus contenedores secundarios. Si el host tiene el administrador de trabajos en cola de la impresora en ejecución, debe detener el servicio en el host antes de intentar iniciar el servicio de impresora en el invitado.

Sugerencia

Si inicia un contenedor y consulta el servicio de administrador de trabajos en cola tanto en el contenedor como en el host simultáneamente, ambos informarán que su estado es "en ejecución". Pero no se engaña: el contenedor no podrá consultar una lista de impresoras disponibles. El servicio de administrador de trabajos en cola del host no se debe ejecutar.

Para comprobar si el host ejecuta el servicio de impresora, use la consulta en 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 en cola en el host, use los siguientes comandos en PowerShell:

Stop-Service spooler
Set-Service spooler -StartupType Disabled

Inicie el contenedor y compruebe 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:\>