azure - 在自托管代理上运行容器作业时 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
解决方案
所以我遇到了同样的问题:
“来自守护进程的错误响应: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,但任何图像都可能出现问题)。
推荐阅读
- java - 如何重用 Android Studio 中方法内部的变量?
- javascript - 如何使用 dexie 更新 indexeddb 存储项目
- html - 响应式无法在 woocommerce wordpress 中的单个产品页面上工作
- javascript - click() 调用点击函数不返回点击函数
- mysql - 如何修复此 mysql 创建表语法错误
- mongodb - 课程表 MongoDB
- java - 使用 JCEF 进行反向和慢速滚动(离屏渲染,操作系统:Linux)
- c# - 如何在 AddRange 之后按升序对列表进行排序
- c# - Task.WaitAll 的使用没有任何“等待”运算符导致警告 CS1998 此异步方法缺少“等待”运算符,将同步运行
- assembly - 星形图案打印不好