Docker 用于 Windows 网络
Docker for Windows networking
我在理解 Docker 和 Windows 以及网络的工作原理时遇到一些问题。在带有桥接适配器和 Ubuntu 虚拟机的 VirtualBox 中,一切正常——我可以从主机 ping 虚拟机(反之亦然)。
- 如何从我网络上的任何设备 ping 一个容器?
- 以及如何在同一主机上 ping 其他不 运行ning 的容器?
我的计划...
是有多台 windows 机器(不是虚拟机),每台 运行 宁一个 Docker 容器(形成一个存储集群),这些容器需要与每个容器通信其他(运行 可能使用 overlay
网络,或者这是否需要 swarm
?)。我还需要与外部对话,这是我能够开始工作的唯一部分,使用 docker run -p
选项公开我需要的容器中的端口。
为了详细说明我的流程,我的目标是构建一个 Amazon S3 样式的键值存储(具体来说,使用 Riak KV),运行 在 linux 上。由于这将需要多台计算机 运行 安装该软件,在我看来 Docker 可以带来一些好处,包括易于设置和部署,以及 运行 [=65] 的框架=] 基于 Windows 的软件,这是我目前可以轻松访问的软件。
我测试过的一些东西...
如果我 运行 两个 Ubuntu 容器在同一主机上使用默认桥接网络,它们可以相互 ping 通。 ifconfig
列出具有 172.17... ip 地址的本地和 eth0 适配器。由此看来,这听起来不像是我要找的桥接器,因为我想要多个主机。
如果我 运行 使用 --network host
的 Ubuntu 容器,我会从 ifconfig
获得更多输出,包括“br-xxxxxxxx”和“vethxxxxxx”适配器。从文档中,
adds a container on the hosts network stack
这听起来很有用,但我可能没听懂。我知道 Docker windows 运行 是 MobyLinuxVM,并使用 Hyper-V 适配器和交换机,主机指的是什么? windows 电脑还是这个虚拟机?使用 --network host
,我仍然无法 ping 我的容器或从容器 ping 我的桌面。
其他想法...
Docker 的常见用法似乎不是基于 Windows,所以我没能找到足够多的参考资料。我的用例与 Docker 的正常使用有很大不同吗?谁能指出我在这里遗漏的东西?
Reading about Hyper-V adapters 让我看起来除了启动容器的方式之外还需要更改网络适配器设置?我想,我很难理解 windows、hyper-v adapter/switch、ubuntu 和 docker.
之间的位置
好问题。我投票反对你收到的反对票。这个问题写得很好,我看不出有任何问题。也许他们认为它不属于 Whosebug,更适合 ServerFault。
这里有一些有用的要点:
- Docker for Windows 创建一个名为
MobyLinuxVM
. 的 Hyper-V Linux 虚拟机
- Hyper-V VM 必须连接到虚拟交换机才能访问网络
- Docker for Windows 创建一个名为
DockerNAT
的 Hyper-V Internal
虚拟交换机
- 查看 What is the Hyper-V Virtual Switch Explained 了解有关
internal
虚拟交换机类型的详细信息(您已经链接到此)
Docker群
- 使用
overlay
网络确实需要 Docker 集群模式(参见:SwarmKit)
这里的底线是:
您尝试解决的场景不适合 Docker Windows。 Docker for Windows 旨在使软件开发人员能够针对安装了 Docker 引擎的本地 Linux VM 编写、调试和测试他们的应用程序。就是这样。 Docker for Windows 自动执行设置 Hyper-V VM、安装 Linux、安装 Docker 引擎并使其可从命令行访问的过程。
您在 "My Plan" 下提出的方案不适合 Docker Windows。相反,我建议设置一个 Docker Swarm Mode 集群。 Docker 不过,存储比这要复杂一些。您还需要研究使用 Docker 存储驱动程序,它可以在 Docker 主机的 Swarm 集群中启用共享存储。有一个非常流行的叫做 Flocker, developed by ClusterHQ。我建议将其作为可能的解决方案进行研究。
不过,我还建议您重新评估您的目标,以及您如何实现这些目标。 Docker 甚至可能不是通用共享存储的正确解决方案。
希望这对你的努力有所帮助。
我在理解 Docker 和 Windows 以及网络的工作原理时遇到一些问题。在带有桥接适配器和 Ubuntu 虚拟机的 VirtualBox 中,一切正常——我可以从主机 ping 虚拟机(反之亦然)。
- 如何从我网络上的任何设备 ping 一个容器?
- 以及如何在同一主机上 ping 其他不 运行ning 的容器?
我的计划...
是有多台 windows 机器(不是虚拟机),每台 运行 宁一个 Docker 容器(形成一个存储集群),这些容器需要与每个容器通信其他(运行 可能使用 overlay
网络,或者这是否需要 swarm
?)。我还需要与外部对话,这是我能够开始工作的唯一部分,使用 docker run -p
选项公开我需要的容器中的端口。
为了详细说明我的流程,我的目标是构建一个 Amazon S3 样式的键值存储(具体来说,使用 Riak KV),运行 在 linux 上。由于这将需要多台计算机 运行 安装该软件,在我看来 Docker 可以带来一些好处,包括易于设置和部署,以及 运行 [=65] 的框架=] 基于 Windows 的软件,这是我目前可以轻松访问的软件。
我测试过的一些东西...
如果我 运行 两个 Ubuntu 容器在同一主机上使用默认桥接网络,它们可以相互 ping 通。 ifconfig
列出具有 172.17... ip 地址的本地和 eth0 适配器。由此看来,这听起来不像是我要找的桥接器,因为我想要多个主机。
如果我 运行 使用 --network host
的 Ubuntu 容器,我会从 ifconfig
获得更多输出,包括“br-xxxxxxxx”和“vethxxxxxx”适配器。从文档中,
adds a container on the hosts network stack
这听起来很有用,但我可能没听懂。我知道 Docker windows 运行 是 MobyLinuxVM,并使用 Hyper-V 适配器和交换机,主机指的是什么? windows 电脑还是这个虚拟机?使用 --network host
,我仍然无法 ping 我的容器或从容器 ping 我的桌面。
其他想法...
Docker 的常见用法似乎不是基于 Windows,所以我没能找到足够多的参考资料。我的用例与 Docker 的正常使用有很大不同吗?谁能指出我在这里遗漏的东西?
Reading about Hyper-V adapters 让我看起来除了启动容器的方式之外还需要更改网络适配器设置?我想,我很难理解 windows、hyper-v adapter/switch、ubuntu 和 docker.
之间的位置好问题。我投票反对你收到的反对票。这个问题写得很好,我看不出有任何问题。也许他们认为它不属于 Whosebug,更适合 ServerFault。
这里有一些有用的要点:
- Docker for Windows 创建一个名为
MobyLinuxVM
. 的 Hyper-V Linux 虚拟机
- Hyper-V VM 必须连接到虚拟交换机才能访问网络
- Docker for Windows 创建一个名为
DockerNAT
的 Hyper-V - 查看 What is the Hyper-V Virtual Switch Explained 了解有关
internal
虚拟交换机类型的详细信息(您已经链接到此)
Internal
虚拟交换机
Docker群
- 使用
overlay
网络确实需要 Docker 集群模式(参见:SwarmKit)
这里的底线是:
您尝试解决的场景不适合 Docker Windows。 Docker for Windows 旨在使软件开发人员能够针对安装了 Docker 引擎的本地 Linux VM 编写、调试和测试他们的应用程序。就是这样。 Docker for Windows 自动执行设置 Hyper-V VM、安装 Linux、安装 Docker 引擎并使其可从命令行访问的过程。
您在 "My Plan" 下提出的方案不适合 Docker Windows。相反,我建议设置一个 Docker Swarm Mode 集群。 Docker 不过,存储比这要复杂一些。您还需要研究使用 Docker 存储驱动程序,它可以在 Docker 主机的 Swarm 集群中启用共享存储。有一个非常流行的叫做 Flocker, developed by ClusterHQ。我建议将其作为可能的解决方案进行研究。
不过,我还建议您重新评估您的目标,以及您如何实现这些目标。 Docker 甚至可能不是通用共享存储的正确解决方案。
希望这对你的努力有所帮助。