我试图在容器中使用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 }]
答案 0 :(得分:1)
我可以重现同样的问题 - 在我调查时,我发现我需要指定该标签以匹配我的Windows版本。例如,由于我使用的是1803
版本,因此我需要对1803
使用microsoft/windowsservercore
标记。之后,我能够看到管道安装成功。
所以我真的改变了所有
FROM microsoft/windowsservercore
到
FROM microsoft/windowsservercore:1803
在你引用的博客文章中,他们会尽力指定Windows 1709,但似乎并没有提到这个问题。那么也许你只是错过了一个标签?