8

我在 Windows server 2016 上使用 docker,我使用“microsoft/windowsservercore:latest”图像创建了一个容器。在这张图片上,我安装了“打印服务器”角色,但是当我尝试调用“Get-Printer”cmdlet 时,后台处理程序服务出现错误。这些是用于重新创建问题的命令:

docker run -d --name testspoolererror1 microsoft/windowsservercore:latest ping -t localhost
docker exec -it testspoolererror1 powershell
Install-WindowsFeature Print-Server
Set-Service spooler -StartupType Automatic
Start-Service spooler
Get-Service spooler
Get-Printer

这是我收到错误的时候:

Get-Printer:无法访问后台打印程序服务。确保后台处理程序服务正在运行。在 line:1 char:1 + Get-Printer + ~~~~~~~~~~~ + CategoryInfo : NotSpecified: (MSFT_Printer:ROOT/StandardCimv2/MSFT_Printer) [Get-Printer], CimException + FullyQualifiedErrorId : HRESULT 0x800706ba, Get-Printer 在事件查看器中我发现了错误:Print Spooler 服务意外终止。它已经完成了 2 次。

谁能帮我解决这个问题?

4

4 回答 4

2

因为 Windows 容器与主机共享相同的内核,所以您不能同时运行假脱机程序。因此,停止并禁用主机的假脱机程序,您就可以在该服务器上的一个容器上使用假脱机程序。

这是固定的命令集:

停止服务假脱机程序
设置服务假脱机程序 -StartupType 已禁用

docker run -d --name testspoolererror1 microsoft/windowsservercore:latest ping -t localhost
docker exec -it testspoolererror1 powershell
安装-WindowsFeature 打印服务器
Set-Service spooler -StartupType Automatic
启动服务假脱机程序
获取服务假脱机程序
获取打印机
于 2018-06-07T18:40:11.593 回答
1

很遗憾听到您遇到此问题,我很乐意尽我所能帮助您解决问题:)

为了彻底起见,我通过运行以下命令自己尝试了这个:

docker run -it microsoft/windowsservercore:latest powershell

(现在从容器内运行 powershell)

Install-WindowsFeature Print-Server
Set-Service spooler -StartupType Automatic
Start-Service spooler
Get-Service spooler
Get-Printer

我能够在我的系统上运行这些,没有错误。所以这是一个开始。

现在,从您的错误看来,假脱机服务甚至没有启动。当你跑步时你看到了什么Get-Service spooler?您是否会尝试在您的系统上运行这些命令,就像我在上面列出的那样,然后报告您的结果?

另外,澄清一下,当您从容器 ping localhost 时,您想做什么?您是否正在尝试 ping 您的容器主机?

作为旁注,如果您正在寻找有关容器网络如何在 Windows 上工作的背景信息,这里是一个很好的起点:https ://docs.microsoft.com/en-us/virtualization/windowscontainers/manage-containers /容器网络

--Kallie B.(微软网络团队项目经理)

于 2017-01-17T01:15:47.703 回答
-1

Kallie 似乎能够使上述步骤起作用的原因可能是因为它的托管方式不同。我在 Server 2016 机器上通过 Docker 尝试了上述步骤,并遇到了同样的错误。当我在 Windows 10 上通过 Docker 尝试它时,我能够成功启动 spooler 并运行上述命令,但我无法成功安装任何驱动程序,这使它真正有用。在尝试安装任何 .inf 文件时,Pnputil 只会抛出奇怪的“无数据”错误。

我的猜测是它可以在 Windows 10 上运行,因为它使用的是 hyper-v 仿真,而不是在 Server 2016 上托管 Server 2016 Core 时使用的本机容器。我注意到的另一件事是,在创建容器时,驱动程序是从基础机器继承的Server 2016,但不在 Windows 10 上。我认为这是 Docker 专家相当容易理解的行为,但看起来继承的驱动程序可能会导致崩溃。不过,我也不是 Windows 专家。

无论哪种方式,这似乎都是微软必须研究和解决的问题。

于 2018-01-26T22:45:18.183 回答
-3
  • docker 运行的网络(默认情况下)与主机的网络不同。

  • 从容器内部 ping localhost 并没有做你认为它正在做的事情。

  • 了解 docker 网络如何作为第 1 步。

于 2017-01-10T15:57:41.033 回答