首页 > 解决方案 > 在自托管代理上运行容器作业时 Azure DevOps YAML 构建失败

问题描述

我正在尝试在我的自托管代理上运行容器作业,以从我的 ACR 中读取容器映像。

当您使用 Microsoft 托管代理时,此代码有效:

pool:
  vmImage: 'ubuntu-18.04'
container:
  image: myprivate.azurecr.io/windowsservercore:1803
  endpoint: my_acr_connection

所以我想要的是使用以下代码:

pool: Default
container:
  image: myprivate.azurecr.io/windowsservercore:1803
  endpoint: my_acr_connection

但是当我运行管道时,我在“初始化作业”步骤中收到此错误:

##[error]File not found: 'docker'

我在默认代理池中只有一名代理。我的代理是按照以下文档创建的:https ://docs.microsoft.com/en-us/azure/devops/pipelines/agents/docker?view=azure-devops#linux

我想这与代理功能有关,但我想知道我正在尝试的内容是否真的可行,如果可以,您能否就如何解决我的问题向我提供一些建议。

先感谢您。

编辑:

我能够处理这个错误。我只需要在 Dockerfile 中的容器内安装 docker。

现在我在“初始化容器”管道的步骤中收到另一个错误:

Error response from daemon: OCI runtime create failed: container_linux.go:370: starting container process caused: exec: "/__a/externals/node/bin/node": stat /__a/externals/node/bin/node: no such file or directory: unknown

标签: azuredockeryamlazure-pipelinesazure-devops-self-hosted-agent

解决方案


所以我遇到了同样的问题:

“来自守护进程的错误响应:OCI 运行时创建失败:container_linux.go:370:启动容器进程导致:exec:“/__a/externals/node/bin/node”:stat /__a/externals/node/bin/node:否此类文件或目录:未知”

就我而言,我使用的是在 Windows 10 上的 WSL1 ubuntu 上运行的自托管代理,在 WSL2 中使用 Docker4Windows。问题是带有 docker 的 WSL1 对作为目录安装的卷存在问题,必须使用 windows 路径 (/c/users....) 而不是本地 linux 路径 (/home/user/linuxuser/ ...)。

将我的代理移动到 WSL2 后问题得到解决,安装问题不会发生。

不管 WSL 问题如何,问题是卷 /__a/externals 无法挂载到代理节点中的容器上。要测试的一件事是在 azure devops 管道中检查失败的步骤日志并检查失败的 docker 命令。你会看到这样的东西:

/usr/bin/docker create --name .... -v "/home/user/agent_directory/externals":"/__a/externals":ro ... CONTAINER_IMAGE

码头工人开始 b39b96fb ....

来自守护进程的错误响应:OCI 运行时创建失败...

因此,您可以检查启动映像以手动安装卷以查看它们是否正确安装,以检测 docker 的问题(可能是权限问题或其他 docker linux 相关问题)。

docker run --rm -ti -v "/home/user/agent_directory/externals":"/__a/externals":ro mcr.microsoft.com/dotnet/core/sdk:3.1 bash

(在我的情况下,图像是 dotnet/core,但任何图像都可能出现问题)。


推荐阅读