首页 > 解决方案 > Azure DevOps 托管代理无法拉取 windows:2004

问题描述

当使用Windows-2019 托管代理(安装了 1809 windows 版本的代理 - Microsoft Windows Server 2019 Datacenter)作为代理规范时,我们无法拉取mcr.microsoft.com/windows:2004docker 镜像。

例外:

在此处输入图像描述

我熟悉这个解决方案(在本地完美运行)。但是,由于 Docker Desktop 没有安装在代理上,我无法切换到 Windows 容器。此外,安装 Docker Desktop 不是一个选项,因为需要重新启动。

目前,创建构建机器不是一种选择。

所以我的问题是:有一种方法可以mcr.microsoft.com/windows:2004从托管代理中提取 docker 映像吗?

标签: azuredockerazure-devopsazure-devops-self-hosted-agent

解决方案


所以我的问题是:有一种方法可以从托管代理中提取 mcr.microsoft.com/windows:2004 docker 映像吗?

恐怕没有这种方法可以mcr.microsoft.com/windows:2004从托管代理中提取 docker 映像。

那是因为将容器主机版本与容器映像版本匹配

Windows Server 容器和底层主机共享一个内核,容器的基本映像必须与主机的基本映像匹配。如果版本不同,容器可能会启动,但不能保证功能完整。

换句话说,Windows 要求主机操作系统版本与容器操作系统版本相匹配。如果您想运行基于较新 Windows 构建的容器,请确保您具有等效的主机构建。否则,您可以使用 Hyper-V 隔离在新的主机版本上运行旧容器。

因此,我们无法从托管代理或( ) 中提取图像windows:2004( )。我们只能使用托管代理提取图像。2004windows-latestwindows-20191809windows:1809

docker pull mcr.microsoft.com/windows/servercore:1809

在此处输入图像描述

但是,如果我windows:1903使用托管代理提取图像,我会收到错误消息no matching manifest for windows/amd64...。为了验证我的答案,我使用了托管在 Windows 版本1903(OS build 18362)上的私有代理,它工作正常。

总之,我们无法在托管代理 (1809) 上拉取 windows:2004 (2004) 图像。此请求的解决方法是使用私有代理。

顺便说一句,我已经测试了您与私人代理的问题中的链接中提到的那些解决方案。也switch to Linux containers不能解决set the "experimental": true这个错误。

参考链接:

Microsoft Windows 版本列表

无法从微软提取图像


推荐阅读