我在理解 Docker for Windows 以及网络如何工作时遇到了一些麻烦。在带有桥接适配器和 Ubuntu 虚拟机的 VirtualBox 中,一切正常——我可以从我的主机 ping 虚拟机(反之亦然)。
- 如何从网络上的任何设备 ping 容器?
- 以及如何 ping 不在同一主机上运行的其他容器?
我的计划...
是让多台 Windows 机器(不是 vms),每台机器都运行一个 Docker 容器(以形成一个存储集群),这些容器需要相互通信(overlay
可能使用网络运行,或者这需要swarm
吗?)。我还需要在外部讨论这个问题,这是我能够开始工作的唯一部分,使用docker run -p
选项来公开我需要的容器中的端口。
为了详细说明我的过程,我的目标是构建一个在 Linux 上运行的 Amazon S3 风格的键值存储(特别是使用 Riak KV)。由于这将需要多台计算机运行该软件,在我看来,Docker 可以带来一些好处,包括易于设置和部署,以及在 Windows 上运行基于 linux 的软件的框架,这是我目前可以轻松访问的。
我测试过的几件事......
如果我使用默认桥接网络在同一主机上运行两个 Ubuntu 容器,它们可以相互 ping 通。ifconfig
列出具有 172.17... ip 地址的本地和 eth0 适配器。由此看来,我想要的并不是桥接器,因为我想要多个主机。
如果我使用“br-xxxxxxxx”和“vethxxxxxx”适配器运行 Ubuntu 容器,--network host
我会得到更多输出。ifconfig
从文档中,
在主机网络堆栈上添加一个容器
这听起来很有用,但也许我不明白。我知道 Docker for windows 运行 MobyLinuxVM,并使用 Hyper-V 适配器和交换机,主机指的是什么?windows pc还是这个虚拟机?使用--network host
,我仍然无法 ping 我的容器或从容器 ping 我的桌面。
其他想法...
Docker 的常见用途似乎不是基于 Windows 的,所以我无法找到足够多的参考资料。我的用例与 Docker 的正常使用有很大不同吗?谁能指出我在这里缺少的东西?
阅读有关 Hyper-V 适配器的信息后,除了如何启动容器之外,我似乎还需要更改网络适配器设置?我想,我很难理解在 windows、hyper-v 适配器/交换机、ubuntu 和 docker 之间的位置。