Диспетчер печати в контейнерах Windows

Приложения с зависимостью от служб печати можно контейнеризировать с помощью контейнеров Windows. Существуют особые требования, которые должны быть выполнены для успешного включения функциональных возможностей службы принтера. В этом руководстве объясняется, как правильно настроить развертывание.

Важный

При успешном получении доступа к службам печати в контейнерах функциональные возможности ограничены; некоторые действия, связанные с печатью, могут не работать. Например, приложения, которые зависят от установки драйверов принтера в систему, не могут быть помещены в контейнер, так как установка драйвера из контейнера не поддерживается. Если вы найдете неподдерживаемую функцию печати, которую вы хотите поддерживать в контейнерах, откройте отзыв ниже.

Настройка

  • Хост должен быть Windows Server 2019 или Windows 10 Pro/Enterprise, обновление от октября 2018 г. или более поздняя версия.
  • Используйте базовый образ для контейнеров Windows или базовый образ для контейнеров Windows Server. Другие базовые образы контейнеров Windows (например, Nano Server и Windows Server Core) не несут роль сервера печати.

Hyper-V Изоляция

Мы рекомендуем запускать контейнер с изоляцией Hyper-V. При запуске в этом режиме можно иметь столько контейнеров, сколько требуется для работы с доступом к службам печати. Вам не нужно изменять службу spooler на узле.

Вы можете проверить функциональные возможности с помощью следующего запроса 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:\>

Изоляция процессов

Из-за общего характера ядра изолированных процессов контейнеров текущее поведение ограничивает работу пользователя только одном экземпляре службы spooler принтера на узле и всех его дочерних контейнерах. Если на узле работает диспетчер очереди принтера, необходимо остановить эту службу на узле, прежде чем пытаться запустить службу принтера в гостевой системе.

Совет

Если вы запускаете контейнер и запрашиваете службу spooler как в контейнере, так и в хосте одновременно, оба будут сообщать о своем состоянии как 'запущены'. Но не обмануйте- контейнер не сможет запрашивать список доступных принтеров. Служба spooler хоста не должна выполняться.

Чтобы проверить, запущен ли узел, работающий со службой принтеров, используйте приведенный ниже запрос в PowerShell.

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

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

PS C:\Users\Administrator>

Чтобы остановить службу spooler на узле, используйте следующие команды в PowerShell:

Stop-Service spooler
Set-Service spooler -StartupType Disabled

Запустите контейнер и проверьте доступ к принтерам.

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:\>