Azure DevOps 托管代理未能拉取 windows:2004

Azure DevOps hosted-agent failed to pull windows:2004

当使用 Windows-2019 hosted agent (Agent installed with 1809 windows version -Microsoft Windows Server 2019 Datacenter) 作为代理规范时,我们无法拉取 mcr.microsoft.com/windows:2004 docker 图像。

异常:

我熟悉 (它在本地运行得很好)。 但是,由于 Docker Desktop 没有安装在代理上,我无法切换到 Windows 容器。此外,安装 Docker 桌面不是一个选项,因为需要重新启动。

目前,创建构建机器不是一个选项。

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

So my question is: There is a way to pull mcr.microsoft.com/windows:2004 docker image from the hosted agent?

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

那是因为 Matching container host version with container image versions:

Windows Server containers and the underlying host share a single kernel, the container’s base image must match that of the host. If the versions are different, the container may start, but full functionally isn't guaranteed.

换句话说,Windows需要主机OS版本匹配容器OS版本。如果你想 运行 一个基于更新的 Windows 构建的容器,请确保你有一个等效的主机构建。否则,您可以在新主机构建上使用 Hyper-V 隔离 运行 旧容器。

所以,我们无法从托管代理 windows-latestwindows-2019 中提取图像 windows:2004 (2004) (1809)。我们只能使用托管代理拉取图像 windows:1809

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

但是,如果我使用托管代理拉取图像 windows:1903,我将收到错误 no matching manifest for windows/amd64...。为了验证我的回答,我使用了私有代理,托管在windows版本1903(OS构建18362),它工作正常。

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

顺便说一句,我已经用私人代理测试了中提到的那些解决方案。 switch to Linux containersset the "experimental": true 都无法解决这个错误。

参考链接:

List of Microsoft Windows versions

Unable to pull images from microsoft