我正在运行有效且已获得许可的 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