'No matching manifest for unknown in the manifest list entries' 当拉 nanoserver:1903

'No matching manifest for unknown in the manifest list entries' when pull nanoserver:1903

我想在 windows 10 pro 上为我的 windows 容器拉取 microsoft-windows-nanoserver

我的环境:

Docker Desktop
Version: 2.0.0.3 (31259)
Channel: stable
Sha1: 8858db33c8692b69de9987a5d672798d778735b2
OS Name: Windows 10 Pro
Windows Edition: Professional
Windows Build Number: 17763

Client: Docker Engine - Community
 Version:   18.09.2
 API version:   1.39
 Go version:go1.10.8
 Git commit:6247962
 Built: Sun Feb 10 04:12:31 2019
 OS/Arch:   windows/amd64
 Experimental:  false

Server: Docker Engine - Community
 Engine:
  Version:  18.09.2
  API version:  1.39 (minimum version 1.24)
  Go version:   go1.10.6
  Git commit:   6247962
  Built:Sun Feb 10 04:28:48 2019
  OS/Arch:  windows/amd64
  Experimental: true

奇怪的是:

拉1803可以:

C:\>docker pull mcr.microsoft.com/windows/nanoserver:1803
1803: Pulling from windows/nanoserver
e46172273a4e: Pull complete
8f7ed89f9e35: Pull complete
Digest: sha256:bc5c1878a69c4538d55bc74e50b7dbafafff1a373120e624e8bad646a0a505dc
Status: Downloaded newer image for mcr.microsoft.com/windows/nanoserver:1803

但是拉1903不行:

C:\>docker pull mcr.microsoft.com/windows/nanoserver:1903
1903: Pulling from windows/nanoserver
no matching manifest for unknown in the manifest list entries

我注意到它的 dockerhub 中有一个 table:

Tags    Architecture    Dockerfile  OsVersion   CreatedTime LastUpdatedTime
1903    multiarch   No Dockerfile   10.0.18362.239  05/21/2019 18:01:07 07/09/2019 18:29:39
1803    multiarch   No Dockerfile   10.0.17134.885  10/05/2018 22:06:26 07/09/2019 17:41:59

OsVersion 是指 docker host os's version 还是 my contaner's distrubtion's version?可以看到我的windows host os是17763,这可能是我无法拉1903的原因还是其他原因?

另外,如果上面的猜测是正确的,那为什么会这样呢?据我所知,容器只是共享host的内核,不应该关心os版本,同时,docker for windows on windows10使用hyper-v,为什么它关心我的 windows os 的版本吗?

如果我想使用新版本的容器,我真的不想一次又一次地升级我的 os...我希望我的猜测是错误的,有什么我想念的吗?

我找到了答案。

  1. 执行docker pull mcr.microsoft.com/windows/nanoserver:1903后,发现C:\Users\user\AppData\Local\Docker\log.txt里有调试日志,上面写着:

    debug: a Windows version 10.0.18362-based image is incompatible with a 10.0.17763 host

    所以,它证实了我的猜测,我的问题发生是因为我使用旧的 windows 10 版本,必须将我的 windows10 升级到至少 10.0.18362.239 才能使用 nanoserver:1903.

  2. 之所以要这样做,我明白了microsoft official explainaiton:

    Windows Server 2016 and Windows 10 Anniversary Update (both version 14393) were the first Windows releases that could build and run Windows Server containers. Containers built using these versions can run on newer releases such as Windows Server version 1709, but there are a few things you need to know before you start.

    As we've been improving the Windows container features, we've had to make some changes that can affect compatibility. Older containers will run the same on newer hosts with Hyper-V isolation, and will use the same (older) kernel version. However, if you want to run a container based on a newer Windows build, it can only run on the newer host build.

    看来,microsoft 还在改进windows 容器特性,所以如果需要使用基于较新windows 的容器,我们有升级 host windows os(我猜可能也与某些 hyper-v 升级有关)。