docker run mcr.microsoft.com/windows/servercore:ltsc2022 -i --isolation=hyperv 导致错误。我做错了什么?

docker run mcr.microsoft.com/windows/servercore:ltsc2022 -i --isolation=hyperv 导致错误。我做错了什么?

我正在运行有效且已获得许可的 Windows 11 Pro 副本。

> docker version
Client:
 Cloud integration: v1.0.22
 Version:           20.10.13
 API version:       1.41
 Go version:        go1.16.15
 Git commit:        a224086
 Built:             Thu Mar 10 14:13:04 2022
 OS/Arch:           windows/amd64
 Context:           default
 Experimental:      true

Server: Docker Desktop 4.6.1 (76265)
 Engine:
  Version:          20.10.13
  API version:      1.41 (minimum version 1.24)
  Go version:       go1.16.15
  Git commit:       906f57f
  Built:            Thu Mar 10 14:08:21 2022
  OS/Arch:          windows/amd64
  Experimental:     false

根据 Docker 的文档,使用--isolation=hyperv应该可以兼容大多数版本的 Windows 图像:

在此处输入图片描述

因此看起来兼容性不应该成为 hyper-v 的问题。

好吧,当我跑步时:

docker run mcr.microsoft.com/windows/servercore:ltsc2022 -i --isolation=hyperv

我收到错误:

docker : Unable to find image 'mcr.microsoft.com/windows/servercore:ltsc2022' locally
At line:1 char:1
+ docker run mcr.microsoft.com/windows/servercore:ltsc2022 -i --isolati ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (Unable to find ...sc2022' locally:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError
 
ltsc2022: Pulling from windows/servercore
8f616e6e9eec: Pulling fs layer
037d5740b404: Pulling fs layer
037d5740b404: Verifying Checksum
037d5740b404: Download complete
8f616e6e9eec: Verifying Checksum
8f616e6e9eec: Download complete
8f616e6e9eec: Pull complete
037d5740b404: Pull complete
Digest: sha256:343f8c95ec604913c74597f6d541e388f83bc0ce373ee8ea5bb26d268879f338
Status: Downloaded newer image for mcr.microsoft.com/windows/servercore:ltsc2022
docker: Error response from daemon: container 597ea2d8b5564b2a8771980c3c809b6e059d00d8bc831e97b3cf14a071820aed encountered an error during hcsshim::System::CreateProcess: failure in a Windows system call: The system cannot find 
the file specified. (0x2)
[Event Detail:  Provider: 00000000-0000-0000-0000-000000000000]
[Event Detail:  Provider: 00000000-0000-0000-0000-000000000000]
[Event Detail: onecore\vm\compute\management\orchestration\vmhostedcontainer\processmanagement.cpp(173)\vmcomputeagent.exe!00007FF61BE0EFBD: (caller: 00007FF61BDB4E97) Exception(2) tid(3c8) 80070002 The system cannot find the 
file specified.
    CallContext:[\Bridge_ProcessMessage\VmHostedContainer_ExecuteProcess] 
 Provider: 00000000-0000-0000-0000-000000000000].

这是在我尝试了许多不同的图像(带有和不带有 hyper-v)、重新启动了我的 PC 并将 Docker 重置为出厂默认设置之后。

删除--isolation=hyperv会导致完全相同的错误。

这里可能发生什么事?

答案1

我找到了问题所在。所有这些测试都是通过 PowerShell ISE 终端进行的。这在某种程度上造成了问题。从任何其他终端,它实际上都可以正常工作。

我已将此作为一个错误报告给 Docker CLI GitHub repo。

编辑:我错了。是的,错误不再发生,但结果仍然是容器死机,从任何 PowerShell 终端都如此。我创建了一个问题:https://github.com/docker/cli/issues/3548

编辑 2:啊哈。搞明白了。一个明显被忽略的错误(PowerShell ISE 因错误处理失败而无法说明实际问题,这就是问题所在),以及文档不一致。这就是这一切的根源。如果我运行命令记录在这里(使用 -it)运行良好。我正在运行命令docker run mcr.microsoft.com/windows/nanoserver:2022 记录在这里。 它说:

在此处输入图片描述

此映像的默认入口点是 Cmd.exe。要运行该映像,请执行以下操作:

docker run mcr.microsoft.com/windows/nanoserver:2022

我认为这份文件完全是错误的,或者至少是误导性的。

因此,首先我从错误的地方运行它,然后我运行了错误的命令,该图像的 Docker 页面建议使用该命令。

答案2

这些参数传递的顺序是错误的:

docker run mcr.microsoft.com/windows/servercore:ltsc2022 -i --isolation=hyperv

您需要将选项传递到docker run图像名称之前。例如

docker run -i --isolation=hyperv mcr.microsoft.com/windows/servercore:ltsc2022

相关内容