Docker Windows 授予构建代理用户访问权限

Docker Windows Grant Access to Build Agent User

我正在尝试配置 GoCD 代理以使用 Docker 构建我的项目。最初我的 GoAgents 运行 作为 SYSTEM,因为这是 Windows 上的默认安装,但我发现在构建过程中产生了问题(由于 $env:TEMP 没有被定义或被定义,我遇到了奇怪的失败定义在一个奇怪的地方)。

我将我的 go agents 切换到本地帐户,并将 运行ted 帐户权限切换为 运行 作为服务。在我尝试构建 docker 图像之前,这一直很有效。我有一个脚本可以完美地作为我的用户使用,但当 运行ning 作为 GoCD 代理时失败。

error during connect: Post http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.32/build?buildargs=%7B%22EngineDir%22%3A%22C%3A%5C%5CInfinity%22%2C%22ImageVersion%22%3A%222.0.0%22%7D&cachefrom=%5B%5D&cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=Dockerfile&labels=%7B%7D&memory=0&memswap=0&networkmode=default&rm=1&session=29985a28e57e1f1b4fa8950cfa0f747b4c2680fa5f4fcb3643f68b4595825651&shmsize=0&t=invoke-infinity%3Alatest&t=invoke-infinity%3A2.0.0&target=&ulimits=null: 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.

我尝试将用户添加到 docker-users 组,但这似乎没有帮助。我已尝试按照这篇文章 http://dille.name/blog/2017/11/29/using-the-docker-named-pipe-as-a-non-admin-for-windowscontainers/ 进行操作,但收到错误提示 Docker Windows 不支持 "hosts".

是否有人可以让非管理员用户在 Windows 上进行 运行 docker 构建?

谢谢

所以这个问题的最佳答案(我得到的)是我为相关帐户添加了一个 DOCKER_HOST 环境变量以使用 tcp 连接。

DOCKER_HOST=tcp://127.0.0.1:2375

我必须编辑 'C:\ProgramData\Docker\config\daemon.json' 文件并添加一个 "host"。

{
  ...
  "hosts": [
    "npipe://",
    ...
    "tcp://127.0.0.1:2375"

  ]
}

设置完成后,帐户就可以通过 CLI 调用 docker 引擎。

警告: 这可能是不安全的,Docker 警告说这可能会导致远程代码执行。不确定如何具体细节,但对我来说风险很小,我愿意佩戴它。

附加: 通过创建更改命名管道的 SecurityDescriptor 的 C# 程序,我能够使用命名管道 \.\pipe\docker_engine 使其正常工作。然而,我放弃了这个作为一个可行的解决方案,因为它需要 运行 每次引擎是 started/stopped 并且对我来说太脆弱了

此问题现已在 Docker 中针对 Windows 版本 18.03.0-ce 修复。基本上这个版本创建了一个名为 docker-users 的本地组,他们都可以访问管道。只需将所需的用户添加为该组的成员,快乐的日子!

https://docs.docker.com/docker-for-windows/release-notes/#docker-community-edition-18030-ce-win59-2018-03-26

https://github.com/docker/for-win/issues/1732