Windows 2016:Docker容器错误

时间:2017-01-10 09:33:21

标签: windows docker windows-server-2016

我在Windows服务器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:无法访问后台处理程序服务。确保后台打印程序服务正在运行。   在行:1个字符:1   +获取打印机   + ~~~~~~~~~~~       + CategoryInfo:未指定:(MSFT_Printer:ROOT / StandardCimv2 / MSFT_Printer)[Get-Printer],CimException       + FullyQualifiedErrorId:HRESULT 0x800706ba,Get-Printer   在事件查看器中我发现错误:   Print Spooler服务意外终止。它完成了这2次。

任何人都可以帮我解决这个问题吗?

4 个答案:

答案 0 :(得分:2)

我很遗憾听到您有这个问题,我很乐意尽我所能来帮助您解决问题:)

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

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/container-networking

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

答案 1 :(得分:0)

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

这是一组固定的命令:

Stop-Service spooler
Set-Service spooler -StartupType Disabled

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

答案 2 :(得分:-1)

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

我的猜测是它可以在Windows 10上运行,因为它使用的是超级v仿真,而不是在Server 2016上托管Server 2016 Core时使用的本机容器。我注意到的另一件事是驱动程序在创建时继承自基本机器Server 2016上的一个容器,但不是Windows 10上的容器。我认为这是Docker专家公认的行为,但似乎继承的驱动程序可能导致崩溃。不过,我也不是Windows专家。

无论哪种方式,微软都必须考虑并解决这个问题。

答案 3 :(得分:-3)

  • Docker运行的网络(默认情况下)与主机的网络不同。

  • 从容器内部ping localhost并没有按照您的想法进行操作。

  • 了解docker networks如何成为第1步。