我正在尝试使用Docker镜像作为Azure管道中的构建代理。我使用的是Azure Docker Server2019和DevOps企业版。
当管道运行时,我得到这个错误:
##[section]Starting: Initialize containers
##[command]C:\Program Files\Docker\docker.EXE version --format '{{.Server.APIVersion}}'
error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.40/version: open //./pipe/docker_engine: Access is denied. In the default daemon configuration on Windows, the docker client must be run elevated to connect. This error may also indicate that the docker daemon is not running.
'
##[error]Exit code 1 returned from process: file name 'C:\Program Files\Docker\docker.EXE', arguments 'version --format '{{.Server.APIVersion}}''.
##[section]Finishing: Initialize containers我已经确认Docker已经安装在服务器上了。我运行了以下命令,以确保Docker在服务器上运行,并且所有命令都运行成功:
Start-Service Docker
docker network ls
docker version下面是我正在使用的管道YAML文件:
trigger:
none
resources:
containers:
- container: angulardocker
image: mdailey77/angularbuild:1.0
endpoint: Docker Hub
stages:
- stage: Client
jobs:
- job: BuildTest
pool:
name: Default Windows
container: angulardocker
steps:
- task: Npm@1
displayName: 'Client Build'
inputs:
command: custom
customCommand: run build -- --prod
workingDir: client
- task: CopyFiles@2
displayName: 'Copy Client Build to Staging Directory'
inputs:
contents: '**'
SourceFolder: $(Build.SourcesDirectory)/client/dist
targetFolder: $(Build.ArtifactStagingDirectory)/client
- task: PublishBuildArtifacts@1
displayName: 'Publish Build Artifact - Client'
inputs:
pathToPublish: '$(Build.ArtifactStagingDirectory)/client'
artifactName: 'Client'该错误发生在初始化容器管道步骤中。至少可以说,关于Docker镜像作为构建代理的Microsoft文档是缺乏的。这一点帮助都没有。我找到的这篇文章有最好的例子:https://im5tu.io/article/2018/12/building-a-custom-build-agent-image-with-docker-and-azure-devops-pipelines/。我找不到错误,就卡在那一刻了。
更新:在做了更多的研究和@vaibhavnd建议后,我相当确定这个问题是我的管道构建代理无法访问Docker守护进程。一如既往,Microsoft文档提到了这一点,但实际上并没有说明如何做到这一点。如何配置我的生成代理以使它们具有访问权限?具体的步骤是什么?
更新2:我考虑将用户添加到docker-user组,但服务器上没有这样的组。根据one GitHub post的说法,docker用户组应该是在安装Docker并重新启动后自动创建的。我重新启动了服务器,但组仍然不存在。
发布于 2020-11-23 02:42:27
我想出了解决这个问题的办法。这个GitHub post真的帮了我大忙。我使用了帖子中提到的dockeraccesshelper。我授予了与我的管道构建代理相关的帐户,因此在本例中为'NT AUTHORITY\NETWORK SERVICE‘,即访问Docker。一旦我这样做了,我的管道就能够初始化Docker容器了。
使用docker-user group路线对我不起作用。安装Docker Enterprise时,docker-user组不是自动创建的。我认为在Windows Server 2019上使用Docker Enterprise时,这可能是正常的。我尝试自己创建组,并将'NT AUTHORITY/NETWORK SERVICE‘帐户添加到组中,但无法添加。
https://stackoverflow.com/questions/64914552
复制相似问题