我想在Windows 10专业版上为我的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中有一个表:
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主机操作系统是17763
,这可能是我无法拉出1903
或其他原因的原因?
此外,如果以上猜测正确,那么为什么会发生这种情况?据我所知,容器只共享主机的内核,不关心操作系统的版本,同时,docker for windows
上的windows10
使用hyper-v
,为什么它关心我的Windows操作系统的版本?
如果我想使用新版本的容器,我真的不想一次又一次地升级操作系统...我希望我的猜测是错误的,我错过了什么吗?
答案 0 :(得分:0)
我找到了答案。
执行docker pull mcr.microsoft.com/windows/nanoserver:1903
后,我发现C:\Users\user\AppData\Local\Docker\log.txt
中有一个调试日志,它说:
调试:基于Windows版本10.0.18362的映像与10.0.17763主机不兼容
因此,它证实了我的猜测,发生问题是因为我使用的是Windows 10旧版本,必须将Windows10至少升级到10.0.18362.239
才能使用nanoserver:1903
。
我们必须做以上操作的原因,我看到microsoft official explainaiton:
Windows Server 2016和Windows 10周年更新(均为版本14393)是最早可以构建和运行Windows Server容器的Windows版本。使用这些版本构建的容器可以在较新的版本(例如Windows Server 1709版)上运行,但是在开始之前,您需要了解一些知识。
由于我们一直在改进Windows容器功能,因此我们不得不进行一些可能影响兼容性的更改。较旧的容器将在具有Hyper-V隔离的较新主机上运行相同的容器,并使用相同(较旧)的内核版本。但是,如果要基于更新的Windows构建运行容器,则只能在更新的主机构建上运行。
看来,微软仍在改善Windows容器功能的过程中,因此,如果需要使用基于较新Windows的容器,我们必须升级主机Windows操作系统(也许还与某些Hyper-V升级有关猜)。