有时候,当我们的项目必须要在win系统下跑,并且开发环境相对复杂(难以重新配置到新设备),这个时候其实可以用docker拉取win的镜像,配置好一个镜像后,就可以一劳永逸。
windows10以上系统和Windows server的安装docker和拉取镜像有所不同,具体可以参考:
Windows 容器文档 | Microsoft Learn
前提:
安装好docker后,控制台输入指令:docker version 即可查看本地机器和服务机器的系统版本,如果两者的版本都是windows(如图1),那就可以下一步。
图1 windows server 2016系统的服务器
拉取python-windows镜像:
往往我们想要的镜像,在docker hub上都已经有人做好了,我们可以拉取下来,自己再改改就可以了。依python为例,在Docker Hub上搜索python,如图2,点第一个。
图2 docker hub搜索python
进去之后,点击Overview,往下拉可以看到Dockerfile制作镜像的方法(图3);点击Tags,可以看到很多版本,但是都是linux系统的(图4)。
图3 Dockerfile for python
图4 python-linux镜像
回到Overview,往下拉,可以找到python:<version>-windowsservercore(如图5),这里有介绍,这个版本的镜像是基于 Windows Server Core的,并且可以运行在win10和win server 2016上。只需要将图3的python版本换成这里的windowsserver版本就行了(没试过应该是docker pull python:3.8-windowsservercore或者在Dockerfile里FROM python:3.8-windowsservercore)。
图5 python:<version>-windowsservercore
拉取windows server core基础镜像:
可能你的需求不是python+win,那么,你可以在windows server core基础镜像的基础上安装你的软件包。打开 Windows Server Core,可以看到有很多版本(图6 图7)。
图6
图7
重点来了:比如我在我的windows server 2016上,pwoershell中输入,如图8。
docker pull mcr.microsoft.com/windows/servercore:ltsc2022
会报错:
no matching manifest for windows/amd64 10.0.14393 in the manifest list entries
图8 拉取镜像报错
这是因为我们下载的版本和我们电脑的win版本不一致导致的。那么你可能要问了,我该怎么拉取和我电脑对应版本的镜像呢?
** 解决方法:**打开 Windows Server Core,往下翻,我们可以看到一个表格,这个表格对应了很多版本(图9)。
图 9
图8报错的信息中有告知,我的windows server 2016的系统版本10.0.14393,对应的镜像版本是ltsc2016,这时候我们
docker pull mcr.microsoft.com/windows/servercore:ltsc2016
就可以拉取成功了。再不行就换ltsc2016-amd64,具体和ltsc2016有什么区别,有知道的可以评论区回答一下。
如果你是windows10系统或者别的系统,可以在图7跳转,找到自己的版本拉取。
**win系统拉取win镜像不成功的大部分原因就是版本没有对齐。**
版权归原作者 xuqingda 所有, 如有侵权,请联系我们删除。