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

旧巷老猫 提交于 2021-01-29 08:04:58

问题


I want to pull microsoft-windows-nanoserver for my windows container on windows 10 pro.

My environment:

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

What's strange is:

Pull 1803 is ok:

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

But pull 1903 is not ok:

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

What I notice is there is a table in its dockerhub:

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

Does the OsVersion mean the docker host os's version or my contaner's distrubtion's version? You can see my windows host os is 17763, this could be the reason I cannot pull 1903 or other reason?

Additional, if above guess is correct, then why could this happen? As I know, container just share the host's kernel, shouldn't care the os version, meanwhile, docker for windows on windows10 use hyper-v, why it care my windows os's version?

I really don't want to upgrade my os again and again if I want to use new version container... I hope my guess is wrong, anything I miss?


回答1:


I find the answer.

  1. After I execute docker pull mcr.microsoft.com/windows/nanoserver:1903, I find there is a debug log in C:\Users\user\AppData\Local\Docker\log.txt, it said:

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

    So, it confirms my guess, my issue happens because I use an old windows 10 version, had to upgrade my windows10 to at least 10.0.18362.239 to use nanoserver:1903.

  2. The reason why we had to do above, I see 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.

    From it, it seems, microsoft still in the process of improve windows container features, so if need to use container which based on newer windows, we had to upgrade host windows os(maybe also related to some hyper-v upgrade I guess).



来源:https://stackoverflow.com/questions/57406489/no-matching-manifest-for-unknown-in-the-manifest-list-entries-when-pull-nanose

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!