我在两台Windows计算机(Windows 10和Windows 7 x64 SP1)上成功Docker for Windows install。我可以通过终端服务(RDP)或通过Powershell远程处理成功执行docker主机的管理职责。
但是,Docker文档表明Docker主机提供了自己的RESTful remote api进行管理。我想使用这个API。问题是在文档中给出的所有示例中,客户端调用(通过curl
)实际上与Docker主机位于同一个框中。换句话说,它们实际上并不是远程,不幸的是,适应远程场景的步骤并不明显。
例如,请直接从文档中考虑此命令:
curl --insecure --cert~ / .docker / cert.pem --key~ / .docker / key.pem https://YOUR_VM_IP:2376/images/json
显然我需要YOUR_VM_IP
才能继续。所以在我的两个Windows框中输入docker-machine ls
。我发现,在两者物理Windows机器上,Docker主机的地址为tcp://192.168.99.100:2376
。
糟糕。他们不能两者具有相同的IP地址。显然,VirtualBox NAT地址在两种情况下都是VM本地的。
这是主要问题。我想知道如何公开外部可见的Docker主机IP地址,以便我可以实际执行远程管理。
可能这个问题不是关于Docker而是关于VirtualBox的。 Docker Host VM可以配置多种网络接口和网络模式(例如NAT,网桥,内部,仅主机。也许某种组合可以使Docking Host VM的IP暴露。
不是吗?另一种可能性是,我只是误解了Docker对远程API"远程API的意义。也许"远程"只是意味着我不需要直接SSH到Docker主机,来自主机,以便执行管理。但是,我不认为我有误解 - 尤其是当我看到这样的引号时:默认情况下,守护程序只能接受Unix域套接字上的本地连接。 取自:Docker Machine Basics
是的,我当然发现"默认情况下"它确实是当地的。现在我只需要知道如何使它成为非本地的,这样我就可以提供远程管理。我在任何地方都找不到相关文档。
有什么想法吗?
答案 0 :(得分:1)
我在任何地方都找不到相关的文档。
嗯,这可能是因为“windows上的docker”只是一个黑客,只针对一个盒子上的本地开发。
每个人在生产中运行Docker(即需要多个盒子的人)只需在Linux上直接运行Docker而无需额外的VM。所有编排技术(Kubernetes等)都假设Docker服务器具有可路由的IP地址。
可能这个问题不是关于Docker而是关于VirtualBox的。
正确。您可以通过exposing your VM's port 2376将问题“修复”到您的网络。您可能还必须在Windows防火墙中允许该端口。
答案 1 :(得分:0)
更新:如果您使用的是Windows Server 2016,可以尝试在here的帮助下启用远程服务器
希望Microsoft Docker.Dotnet上Issue 109的详细信息有用
从以上链接中提取如下
Docker for Windows使用命名管道npipe:////./pipe/docker_engine
来访问REST API。您必须将管道映射到tcp端口。
可以使用socat:
完成此操作 socat TCP-LISTEN:2375,reuseaddr,fork PIPE:\\.\pipes\docker_engine
运行socat地图后,您可以使用
进行连接 tcp://localhost:2375
有关此问题的更多信息here。
如果有帮助请告诉我