问题
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.
After I execute
docker pull mcr.microsoft.com/windows/nanoserver:1903
, I find there is a debug log inC:\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 usenanoserver:1903
.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