Запуск докера внутри Docker Windows Container для DevOps Buildagent

Я работаю с Microsoft Dynamics 365 Business Central. Программное обеспечение ERP.

Я пытаюсь создать агенты сборки на моем локальном сервере, чтобы настроить непрерывную интеграцию с моими проектами.

На сервере сборки я использую Docker Enterprise в Windows 2019.

Когда я раскручиваю свой докерагент, чтобы облегчить сборку, у меня возникают проблемы.

Мой поток CI запрашивает dockeragent развернуть еще один докер-контейнер с именем navcontainerhelper, который в основном является док-контейнером, который содержит среду Business Central для построения моего приложения.

Однако navcontainerhelper не знает команд докера, поскольку он не включает докер.

Я исследовал и обнаружил, что монтирование сокета-докера с -v - способ сделать это, однако я не могу заставить его работать.

Когда я создаю агент, я использую следующую команду:

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 '***'.

Любые указатели будут с благодарностью!

2 ответа

В этом случае ответом было использование именованных каналов следующим образом:

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

и установить докер-клиент в контейнер, чтобы он мог общаться с механизмом докера

У меня возникли проблемы с установкой, поэтому я использовал один из образов Windows, предоставленных из докером,концентратора докеров в качестве базового образа вместо образа Microsoft. Следовал оставшимся инструкциям Microsoft . Запустил контейнер с помощью приведенной ниже команды, и все работало гладко.

      `docker run --env-file agent.env -v \\.\pipe\docker_engine:\\.\pipe\docker_engine --name dockeragent dockeragent:latest` 
Другие вопросы по тегам