在群集模式下覆盖networking,无需Docker机器

我目前有三个主机( docker1docker2docker3 ),我还没有使用Docker Machine进行设置,每个主机都运行v1.12-rc4 Docker守护进程。

我在docker1上运行docker1 docker swarm init ,后者依次打印在docker2docker3上运行的docker2 docker swarm join命令。 此时,在每个主机上运行docker info都包含Swarm: active行。

在这一点上,行为似乎不同于我以前用独立的Swarm容器获得的行为。 尤其是,运行docker network ls将只显示本地主机上的networking,当试图创build一个覆盖networking时,工作节点似乎并不知道它( 它不会出现在它的docker network ls 。 )

我觉得我错过了一些有关Swarm模式的工作而不是Swarm容器的重要信息。

在获得覆盖networkingfunction的同时,在Docker 1.12上设置这样一个没有 Docker Machine的集群的正确方法是什么?

当我第一次使用它时,我也认为这是一个问题。

这在1.12rc4中的工作方式有点不同 – 当你将一个容器部署到你的群集并连接到它的networking时,它应该在其他节点上创buildnetworking。

希望这可以帮助!

问题

您正在使用docker命令(用于与本地主机Docker守护程序进行通信),而不是“ swarm ”命令(用于与Swarm主机进行通信)。

这取决于你用来启动Swarm的命令。 这个答案详细介绍了一个完整的分步教程(包括如何部署覆盖networking的细节)。 我确信阅读这个将会帮助你;)

在networking范围内,networking只能根据需要传播到工作节点。 如果您使用该networking创build服务,并在该工作节点上进行调度,则networking将显示在docker network ls

随着即将到来的1.13版本,您可以通过执行docker network create --attachable ...来获得一个与非swarmnetworking具有相似行为的docker network create --attachable ... 。 该networking对于服务和普通容器都是有效的,并且将对群集的所有成员都可用。 从1.13.0-rc2开始,这些似乎并不出现在docker network ls的输出中。