docker - 在 Docker Windows 容器内运行 docker for DevOps Buildagent

标签 docker azure-devops windows-container build-agent dynamics-business-central

我正在使用 Microsoft Dynamics 365 Business Central。 (ERP 软件)。

我正在尝试在本地服务器上创建构建代理,以设置与我的项目的持续集成。

在构建服务器上,我在 Windows 2019 上运行 Docker Enterprise。

当我启动 dockeragent 来促进构建时,我遇到了问题。

我的 CI 流程要求 dockeragent 启动另一个名为 navcontainerhelper 的 docker 容器,该容器基本上是一个 docker 容器,其中包含用于构建我的应用程序的 Business Central 环境。

但是 navcontainerhelper 不知道 docker 命令,因为它不包含 docker。

我研究并发现使用 -v 安装 docker 套接字是执行此操作的方法,但我似乎无法使其工作。

当我创建代理时,我使用以下命令:

docker run -v /var/run/docker.sock:/var/run/docker.sock -ti dockeragent:latest -e AZP_URL=<My azure url> -e AZP_TOKEN=<my azure token) -e AZP_AGENT_NAME=<my builder agent name>

当我尝试执行此操作时,我收到以下命令,这使我得出上述结论。

docker : C:\Program Files\docker\docker.exe: Error response from daemon: invalid volume specification: '/var/run/docker.sock:/var/run/docker.sock'.
At C:\dockeragent\StartAgents.ps1:1 char:1
+ docker run -v /var/run/docker.sock:/var/run/docker.sock -ti dockerage ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (C:\Program File...n/docker.sock'.:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

See 'C:\Program Files\docker\docker.exe run --help'.

有人可以告诉我我做错了什么吗?

我已更改脚本以在 Windows 中使用命名管道。现在它的安装方式如下:

docker run -e AZP_URL=<My azure url> -e AZP_TOKEN=<my azure token) -e AZP_AGENT_NAME=<my builder agent name> -v \\.\pipe\docker_engine:\\.\pipe\docker_engine dockeragent:latest

但是容器仍然拒绝识别我的 docker 命令:

New-NavContainer : The term 'docker' is not recognized as the name of a cmdlet, function, script file, or operable 
program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At C:\azp\agent\_work\***\s\scripts\Create-Container.ps***:36 char:***
+ New-NavContainer @parameters `
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (docker:String) [New-NavContainer], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException,New-NavContainer

PowerShell exited with code '***'.

任何指点将不胜感激!

最佳答案

在这种情况下,答案是使用命名管道,如下所示:

-v \.\pipe\docker_engine:\\.\pipe\docker_engine

并将 docker 客户端安装到容器中,以便它可以与 docker 引擎通信

关于docker - 在 Docker Windows 容器内运行 docker for DevOps Buildagent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57123043/

相关文章:

Azure DevOps - 在 Azure YAML 管道的 React 构建中将文件夹拖放到空

tfs - 仅当工件与上次发布相比发生变化时,如何触发夜间部署

asp.net - Windows docker镜像构建挂起在创建目录时

ubuntu 上使用空间时 Dockerfile 出错

docker - Kubernetes 入口域重定向

ruby-on-rails - docker-compose 在 bundle 中找不到 gemfile

nginx - Kubernetes nginx-ingress 入口 Controller 由应用程序处理的 CORS

docker - 如何卸载 docker 引擎?

azure - 如果变量不等于azure pipeline yaml中的预期值,如何跳过模板?

sql-server - 在 Sql Server Docker 容器中禁用密码策略