概要
Windows Server 2016 コンテナ にプリンタドライバーをインストールする方法です。
Windows Server Core の docker イメージをベースにコンテナを作成しますが、Server Coreは通常の Windows Server 2016 よりも機能が絞られているためプリンタドライバーのインストールでエラーが多発しました。また、コマンドラインベースのためエラーの詳細が不明でエラーの原因の特定にも非常に苦労しました。ようやくプリンタドライバーのインストールまで実現できましたので手順を記載しておきます。
1. はじめに
今回はプリンタドライバーとして FUJI XEROX DocuPrint 4050 ART EXドライバー を使用します。
このプリンタドライバーは、Microsoft Windows ロゴテストに合格しているため問題なくインストールができます。
合格していないプリンタドライバーを利用する場合はインストールに失敗する可能性があるので注意が必要です。
2. Dockerfileの作成
Dockerfileではプリンタドライバーのインストールに必要な以下の機能のインストールとサービスの開始を行います。
- Print-Server
- Spooler
- DeviceInstall
ダウンロードしたプリンタドライバーは展開しておき、Dockerfileと同じディレクトリへ配置します。
FROM microsoft/windowsservercore:ltsc2016
RUN mkdir C:\printer-driver
ADD fxdp4050plw171210wxp6fja/cswnd /printer-driver
RUN PowerShell Install-WindowsFeature Print-Server
RUN PowerShell Set-Service Spooler -StartupType Automatic
RUN PowerShell Start-Service Spooler
RUN PowerShell Set-Service DeviceInstall -StartupType Automatic
RUN PowerShell Start-Service DeviceInstall
ADD Install.ps1 /
CMD PowerShell -File C:\Install.ps1
3. PowerShellスクリプトの作成
DockerfileのRUNからは何故かプリンタドライバーのインストールに失敗するため、CMDからインストールを行います。
インストールに必要なコマンドはPowerShellスクリプトとして用意しておきます。
$printername = "FX DocuPrint 4050"
$printerport = "LPT1:"
pnputil /add-driver "C:\printer-driver\ART_EX\amd64\001\fxlclji.inf" /install
Add-PrinterDriver -Name "$printername"
Add-Printer -Name "$printername" -DriverName "$printername" -PortName "$printerport"
作成したPowerShellスクリプトはDockerfileと同じディレクトリへ配置します。
4. dockerコンテナのビルドと実行
Dockerfileがあるディレクトリへ移動し、以下のコマンドでdockerコンテナのビルドと実行を行います。
正常に実行されている場合、Windows Server 2016 コンテナにプリンタドライバー「FX DocuPrint 4050」がインストールされます。
docker build -t printer-test -m 4G --isolation hyperv .
docker run --rm --memory 4G --isolation hyperv -it printer-test