Docker Swarm出现错误: "Swarm already part of swarm"。

12

加入现有的节点时,Docker Swarm 抛出“already part of swarm”的错误

我正在本地机器上运行 Docker Swarm,并尝试初始化该Swarm。执行非常顺利,但是当我尝试将新的工作节点添加到现有管理节点时,会抛出如下所示的错误:“swarm already part of swarm”,提示需要离开该节点。

$ docker swarm init
Swarm initialized: current node (fn405d6jtk8mxbpvdrftr0np1) is now a manager.

要将工作节点添加到此Swarm中,请运行以下命令:

docker swarm join --token SWMTKN-1-5tyw8ux789wpa7yyt75qbilb669tiw53pxriyxu48niznpmaka-7u63l4hom3h60myvtyw8p1mcj 192.168.2.219:2377

要向此群集添加管理器,请运行'docker swarm join-token manager'并按照说明操作。

=>再次使用上述令牌作为工作者并加入后,我会遇到以下错误...

$    docker swarm join --token SWMTKN-1-5tyw8ux789wpa7yyt75qbilb669tiw53pxriyxu48niznpmaka-7u63l4hom3h60myvtyw8p1mcj 192.168.2.219:2377

Error response from daemon: This node is already part of a swarm. Use "docker swarm leave" to leave this swarm and join another one.

你是在同一节点(管理节点)上运行 docker swarm join 命令还是在不同的节点上运行? - Constantin Galbenu
在同一节点上。 - Hushen
1
但是将相同的节点(或虚拟机)添加到同一群集中是不可能的/不合逻辑的。 - Constantin Galbenu
你需要拥有其他节点或虚拟机(VM),并将其添加进来。 - Constantin Galbenu
一旦我们启动了Swarm,就有两个选项,可以使用加入令牌将该节点连接为管理器或工作节点,但是当我尝试其中任何一个时,它都会抛出错误。例如,您可以通过执行“docker swarm init”命令在终端上尝试。我已经尝试了很多次,因为我对这些东西还不熟悉,所以无法正确理解。 - Hushen
6个回答

13
Docker Swarm 是由一个或多个计算机(物理或虚拟,称为节点)组成的集合,可以将您的容器作为服务运行。Swarm 中的节点可以是管理者或工作者。只有在管理者节点上,您才能查看/修改Swarm的状态。 工作者节点仅运行容器。为了在Swarm中运行容器,您必须创建一个服务;该服务将根据您为服务设置的规模而具有零个或多个容器。

要创建Swarm,请在将成为管理节点的计算机上运行docker swarm init命令。然后,在您拥有的其他计算机上运行docker swarm join命令以将它们添加到Swarm中。无法将已经位于Swarm中的计算机添加到Swarm中。在您的情况下,您尝试将创建Swarm的管理器添加到Swarm中。

当您启动Swarm(使用docker swarm init)时,启动Swarm的计算机已经连接到Swarm,您不需要执行其他操作将其连接到Swarm。

在您启动Swarm之后,您可能(并且应该)将其他计算机添加为管理者或工作者。

在创建swarm之后的任何时候,您可以创建服务和/或网络,或部署堆栈。 创建服务 和/或 网络部署堆栈

1

按照以下步骤将节点添加到Swarm中,我们需要1个Master节点和3个Slave节点。

  $ docker-machine create -d virtualbox master1
  $ docker-machine create -d virtualbox slave1
  $ docker-machine create -d virtualbox slave2
  $ docker-machine create -d virtualbox slave3

现在 SSH 到 master1

  $ docker ssh master1

现在使用master1作为Leader初始化swarm集群。
  $ docker swarm --init <master1-ip>  // get the ip as $ docker-machine ip master1
  $ exit

以上命令提供了工作节点加入群集的令牌。
要使用此令牌,请SSH到从节点。现在退出master1 ssh。
  $ docker-machine ssh slave1 
  $ docker swarm join-token <token> <ip>:<port>
  $ exit

现在同样适用于其他从节点

  $ docker-machine ssh slave2
  $ docker swarm join-token <token> <ip>:<port>
  $ exit

  $ docker-machine ssh slave3
  $ docker swarm join-token <token> <ip>:<port>
  $ exit

为了更好地了解当前的主节点和从节点
ssh登录到主节点

  $ docker-machine ssh master1
  $ docker node ls

以上命令将帮助您了解哪些节点已经加入了Swarm
要离开Swarm:

  $ docker swarm leave --force

1
我认为你正在为工作节点使用相同的管理节点,这可能会导致错误。你可以加入一个单独的节点(可以是虚拟节点)作为工作节点。
输入“docker info”并查看Swarm状态,你可以找到Swarm的状态。
如果你在工作节点上遇到“此节点已经是Swarm的一部分”,你应该通过“docker swarm leave --force”离开Swarm,并尝试重新连接。

1
您在运行docker swarm init命令的节点自动成为Swarm Manager。加入令牌是为了添加新节点到Swarm中,以确保您拥有一个高可用性的环境,并尽可能提高其弹性。
根据我上面读到的评论,您确认正在节点上运行工作程序员加入令牌来运行docker swarm init。我建议您阅读DockerDocker Swarm的基础知识。

0

我曾经遇到过类似的问题,我有一个从节点是docker swarm的一部分,然后我的节点机器重新启动了,之后我尝试将这个相同的节点再次添加回swarm,但是它给了我以下错误。我不得不使用docker swarm leave命令离开该节点,然后再次添加它,这样就可以正常工作了。

错误信息:

[######@slave ~]$  docker swarm join --token SWMTKN-1-3nvdabrgv2sg03j9u3ww5or8ujamztqv0tihzo9ip26ewtc0vq-dw5ah2sj4nwbtuvd7lmpecjzp 192.168.xxx.xxx:2377

Error response from daemon: This node is already part of a swarm. Use "docker swarm leave" to leave this swarm and join another one.

解决方案:

[#####n@slave ~]$ docker swarm leave

0

我正在尝试做同样的事情。有3个节点。在主节点上,运行了“docker swarm init”命令。现在在从节点上运行命令sudo docker swarm join --token <Token-ID> <IP>:2377,但是出现错误:“Error response from daemon: rpc error: code = Unavailable desc = all SubConns are in TransientFailure, latest connection error: connec tcp :2377: connect: no route to host”。请问有人可以帮忙吗?


这并没有真正回答问题。如果您有不同的问题,可以通过点击提问来提出。如果您想在此问题获得新的答案时得到通知,您可以关注此问题。一旦您拥有足够的声望,您还可以添加悬赏以吸引更多关注。- 来自审核 - Andrew Ryan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接