【问题标题】:Running docker inside Docker Windows Container for DevOps Buildagent在 Docker Windows Container 中运行 docker for DevOps Buildagent
【发布时间】:2019-07-20 08:31:28
【问题描述】:

我正在使用 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 '***'.

任何指针将不胜感激!

【问题讨论】:

  • 我认为他们正在为 Windows 使用命名管道?
  • 你的构建服务器是 windows 2019,但是这个路径 /var/run/docker 用于 linux。改用 windows 路径。
  • @4c74356b41 使用命名管道似乎是正确的方法。我只是无法让它工作。目前我试图像这样安装它 -v \.\pipe\docker_engine:\\.\pipe\docker_engine.初始图像旋转得非常好,但是当我的 CI 集成的 yaml 文件尝试在容器内运行 docker 命令时,它声称容器不知道命令“docker”
  • 嗯,这意味着你的容器中没有 docker client\cli,很明显
  • 不,它只是将该管道\套接字转发到您的容器。容器仍然需要二进制文件才能与 docker 引擎对话。

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


【解决方案1】:

在这种情况下,答案是像这样使用命名管道:

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

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

【讨论】:

  • 我尝试使用 powershell 命令在 buildagent 容器中手动安装 Docker Enterprise。即使容器似乎响应安装成功,它仍然无法识别 docker 命令
  • 当我运行“docker ps”命令时,它会显示主机系统上的所有当前容器。我认为这与命名管道有关?
  • 奇怪的是,当构建代理尝试运行 docker 容器以在代理容器中构建我的软件时,它声称它无法识别 docker 命令。
【解决方案2】:

我在安装时遇到了问题,因此我使用了一个来自docker hub 的 docker 提供的 Windows 图像作为我的基本图像,而不是微软的图像。跟随微软instructions 的剩余部分。使用以下命令启动容器,一切顺利。

`docker run --env-file agent.env -v \\.\pipe\docker_engine:\\.\pipe\docker_engine --name dockeragent dockeragent:latest` 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-23
    • 2023-03-30
    相关资源
    最近更新 更多