无法访问Container内的Host Docker Engine

时间:2018-02-15 02:10:34

标签: windows docker

简短版本:如何在Windows上的(Windows服务器核心)容器中访问泊坞主机?

长版本:我已经创建了一个基于microsoft / dotnet-framework-build的图像:3.5来安装我们的CI / CD过程中使用的工具。

在构建期间,我安装了chocolatey,然后使用choco安装了docker CLI客户端。这样我就可以从运行的容器(构建映像)中推送存储在主机上的图像,至少这是我的希望。

我遇到的问题是我似乎无法将主机\\.\pipe\docker_engine绑定到容器中的管道。到目前为止,我已经尝试了以下命令行选项(这些选项启动了交互式提示进行测试,但正确的构建将是非交互式的)

docker run --interactive --tty -v \\.\pipe\docker_engine:\\.\pipe\docker_engine my-image

在这种情况下,容器启动但绑定不起作用,因为当我运行docker ps时出现错误:

error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.33/version: open //./pipe/docker_engine: message readmode pipes not supported 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 run --interactive --tty `
           --mount type=bind,src=\\.\pipe\docker_engine,dst=\\.\pipe\docker_engine `
           my-image

在这种情况下,容器甚至不会启动,因为我收到错误:

Error response from daemon: invalid mount config for type "bind": source path must be a directory

如何绑定。\ pipe \ docker_engine以便容器可以访问主机上的docker引擎?

我的主机安装的版本信息是:

Client:
 Version:       17.12.0-ce
 API version:   1.35
 Go version:    go1.9.2
 Git commit:    c97c6d6
 Built: Wed Dec 27 20:05:22 2017
 OS/Arch:       windows/amd64

Server:
 Engine:
  Version:      17.12.0-ce
  API version:  1.35 (minimum version 1.24)
  Go version:   go1.9.2
  Git commit:   c97c6d6
  Built:        Wed Dec 27 20:15:52 2017
  OS/Arch:      windows/amd64
  Experimental: true

容器内的客户端版本信息是

Client:
 Version:      17.10.0-ce
 API version:  1.33
 Go version:   go1.8.3
 Git commit:   f4ffd25
 Built:        Tue Oct 17 19:00:02 2017
 OS/Arch:      windows/amd64

1 个答案:

答案 0 :(得分:3)

只是为了解决这个问题......

我能让这个工作的唯一方法是将另一个主机添加到daemon.json,主机位于docker nat网络上。所以tcp:// nat_network_address:2375

然后我设置了防火墙规则以允许流量并在容器内将DOCKER_HOST环境变量设置为新端点。

之后,我能够连接到主机的docker引擎。

这不太理想,但在适当的修复可用之前一直有效。

Kepboy

更新:此问题已修复。您现在可以在容器中挂载名为pipe的主机。

docker run --interactive --tty -v \\.\pipe\docker_engine:\\.\pipe\docker_engine my-image