Docker Windows容器安装命名管道

时间:2017-12-22 09:22:47

标签: windows docker named-pipes

我试图在容器中使用Jenkins并挂载命名管道来控制主机上的docker引擎。根据{{​​3}}博客文章,为此安装命名管道应该足够了。但是,当我使用该挂载运行容器时,未在容器上打开命名管道,因此,docker客户端无法工作。

我应该在Dockerfile中手动打开命名管道吗?如果是这样,它是如何完成的?

这是一个没有Jenkins的最小repro(我还尝试通过chocolatey将docker插件安装到Jenkins和docker客户端到容器。):

Docker version 17.09.1-ce, build 19e2cf6
Windows version 1709, Build 16299.125

Dockerfile:

# escape=`

FROM microsoft/windowsservercore

SHELL ["powershell"] 
ENTRYPOINT [System.IO.Directory]::GetFiles("\\.\\pipe\\");

构建和运行的命令:

docker build -t namedpipetest .
docker run -v \\.\pipe\docker_engine:\\.\pipe\docker_engine namedpipetest

输出是:

\\.\\pipe\\InitShutdown
\\.\\pipe\\lsass
\\.\\pipe\\ntsvcs
\\.\\pipe\\scerpc
\\.\\pipe\\Winsock2\CatalogChangeListener-454-0
\\.\\pipe\\epmapper
\\.\\pipe\\Winsock2\CatalogChangeListener-124-0
\\.\\pipe\\LSM_API_service
\\.\\pipe\\eventlog
\\.\\pipe\\Winsock2\CatalogChangeListener-4b8-0
\\.\\pipe\\wkssvc
\\.\\pipe\\TermSrv_API_service
\\.\\pipe\\Ctx_WinStation_API_service
\\.\\pipe\\winreg
\\.\\pipe\\cexec-76
\\.\\pipe\\cexec-77
\\.\\pipe\\Winsock2\CatalogChangeListener-4f4-0
\\.\\pipe\\SessEnvPublicRpc
\\.\\pipe\\Winsock2\CatalogChangeListener-278-0
\\.\\pipe\\PSHost.131584061845916516.1868.DefaultAppDomain.powershell

输出:

docker inspect -f '{{ .Mounts }}' 3edad32c9f81

[{npipe  \\.\pipe\docker_engine \\.\pipe\docker_engine   true }]

1 个答案:

答案 0 :(得分:1)

我可以重现同样的问题 - 在我调查时,我发现我需要指定该标签以匹配我的Windows版本。例如,由于我使用的是1803版本,因此我需要对1803使用microsoft/windowsservercore标记。之后,我能够看到管道安装成功。

所以我真的改变了所有

FROM microsoft/windowsservercore

FROM microsoft/windowsservercore:1803

在你引用的博客文章中,他们会尽力指定Windows 1709,但似乎并没有提到这个问题。那么也许你只是错过了一个标签?