Запуск докера внутри 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`