0

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

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

连接时出错:发布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:打开//./pipe/docker_engine:访问被拒绝。在 Windows 上的默认守护程序配置中,必须运行提升的 docker 客户端才能连接。此错误还可能表明 docker 守护程序未运行。

我尝试将用户添加到 docker-users 组,但这似乎没有帮助。我已经尝试关注这篇文章http://dille.name/blog/2017/11/29/using-the-docker-named-pipe-as-a-non-admin-for-windowscontainers/但是得到和错误说Docker Windows 不支持“主机”。

有没有人有办法让 Windows 上的非管理员用户运行 docker build?

谢谢

4

2 回答 2

2

这已在 Docker for 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

于 2018-03-28T06:33:16.610 回答
0

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

DOCKER_HOST=tcp://127.0.0.1:2375

我必须编辑“C:\ProgramData\Docker\config\daemon.json”文件并添加一个“主机”。

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

  ]
}

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

警告:这可能是不安全的,Docker 警告说这可以让你远程执行代码。不确定如何使用的确切细节,但对我来说风险很小,我愿意穿它。

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

于 2018-02-15T05:24:17.110 回答