在群集模式下覆盖networking,无需Docker机器
我目前有三个主机( docker1
, docker2
和docker3
),我还没有使用Docker Machine进行设置,每个主机都运行v1.12-rc4 Docker守护进程。
我在docker1
上运行docker1
docker swarm init
,后者依次打印在docker2
和docker3
上运行的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
的输出中。