用于 Windows 网络的 Docker

Posted

技术标签:

【中文标题】用于 Windows 网络的 Docker【英文标题】:Docker for Windows networking 【发布时间】:2017-01-15 11:45:18 【问题描述】:

我在理解 Docker for Windows 以及网络如何工作时遇到了一些麻烦。在带有桥接适配器和 Ubuntu 虚拟机的 VirtualBox 中,一切正常——我可以从我的主机 ping 虚拟机(反之亦然)。

如何从网络上的任何设备 ping 容器? 以及如何 ping 不在同一主机上运行的其他容器?

我的计划……

是让多台windows机器(不是vms)每台运行一个Docker容器(形成一个存储集群),这些容器需要相互通信(可能使用overlay网络运行,或者这需要@ 987654324@?)。我还需要在外部讨论这个问题,这是我能够开始工作的唯一部分,使用 docker run -p 选项来公开我需要的容器中的端口。

为了详细说明我的流程,我的目标是构建一个在 Linux 上运行的 Amazon S3 风格的键值存储(特别是使用 Riak KV)。由于这将需要多台计算机运行该软件,在我看来,Docker 可以带来一些好处,包括易于设置和部署,以及在 Windows 上运行基于 linux 的软件的框架,这是我目前可以轻松访问的。

我测试过的几件事...

如果我使用默认桥接网络在同一主机上运行两个 Ubuntu 容器,它们可以相互 ping 通。 ifconfig 列出了一个本地和 eth0 适配器,其 IP 地址为 172.17...。由此看来,我想要的并不是桥接器,因为我想要多个主机。

relatively small network on a single host

如果我使用 --network host 运行 Ubuntu 容器,我会从 ifconfig 获得更多输出,包括“br-xxxxxxxx”和“vethxxxxxx”适配器。从文档中,

在主机网络堆栈上添加一个容器

这听起来很有用,但也许我不明白。我知道 Docker for windows 运行 MobyLinuxVM,并使用 Hyper-V 适配器和交换机,主机指的是什么? windows pc还是这个虚拟机?使用 --network host,我仍然无法 ping 我的容器或从容器 ping 我的桌面。

其他想法...

Docker 的常见用途似乎不是基于 Windows 的,因此我无法找到足够多的参考资料。我的用例与 Docker 的正常使用有很大不同吗?谁能指出我在这里遗漏的东西?

Reading about Hyper-V adapters 让我看起来除了如何启动容器之外还需要更改我的网络适配器设置?我想,我很难理解在 windows、hyper-v 适配器/交换机、ubuntu 和 docker 之间的位置。

【问题讨论】:

当您投反对票时,请随时告诉我这是否是重复或措辞不当的问题... 【参考方案1】:

很好的问题。我赞成它以反对您收到的反对票。这个问题写得很好,我看不出有任何问题。也许他们认为它不属于 ***,更适合 ServerFault。

这里有一些有用的要点:

Docker for Windows 创建一个名为 MobyLinuxVM 的 Hyper-V Linux VM。 Hyper-V VM 必须连接到虚拟交换机才能访问网络 Docker for Windows 创建了一个 Hyper-V Internal 虚拟交换机,名为 DockerNAT 查看What is the Hyper-V Virtual Switch Explained 了解有关internal 虚拟交换机类型的详细信息(您已经链接到此)

码头工人群

使用overlay 网络确实需要 Docker Swarm 模式(请参阅:SwarmKit)

这里的底线是:

您尝试解决的方案不适用于 Docker for Windows。 Docker for Windows 旨在使软件开发人员能够针对安装了 Docker 引擎的本地 Linux VM 编写、调试和测试他们的应用程序。就是这样。 Docker for Windows 可自动执行设置 Hyper-V VM、安装 Linux、安装 Docker 引擎并使其可从命令行访问的过程。

您在“我的计划”下提出的方案不适合 Docker for Windows。相反,我建议设置一个 Docker Swarm Mode 集群。不过,Docker 存储比这要复杂一些。您还需要考虑使用 Docker 存储驱动程序,该驱动程序可以跨 Docker 主机的 Swarm 集群实现共享存储。有一个非常流行的叫做Flocker,由ClusterHQ 开发。我建议将其作为可能的解决方案进行研究。

不过,我还建议重新评估您的目标以及实现目标的方式。 Docker 甚至可能不是通用共享存储的正确解决方案。

希望这对您的努力有所帮助。

【讨论】:

非常感谢您的回复和澄清!我更新了我的原始帖子以详细说明我的“思考过程”,但我看到我想要做的事情如何超越或反对 Docker for Windows 的开箱即用目​​标。另外,我会回顾一下 Docker Swarm,看看它是否符合我的目标 如果有人能够在 Windows 上运行 Docker,那么他们可以通过手动创建另一台 Hyper-V Linux 机器、在其上安装 docker 并手动配置网络以从外部公开来自 VM 的端口,对吗?

以上是关于用于 Windows 网络的 Docker的主要内容,如果未能解决你的问题,请参考以下文章

更改 Windows 11 上的网络适配器优先级

npcappacketdriver有啥用

网络安全brainpan-windows缓冲区溢出详解

如何在 QT 或 windows API 中连接到无线 WIFI 网络? [关闭]

Windows 密码抓取

windows里面的hosts文件