2

我有三个在 Swarm 模式服务中运行 RabbitMQ 的复制容器。每个容器充当一个 RabbitMQ 节点来创建一个 RabbitMQ 集群。为此,docker service create如下:

docker service create -e RABBITMQ_ERLANG_COOKIE='mysecretcookie' --replicas 4 --network rnet -p 15672:15672 -p 5672:5672 rabbitmq

此后,我能够rabbitmqctl <hostname> join_cluster在每个从属节点上成功创建一个 RabbitMQ 集群。

我的问题是,如果一个 swarm 节点出现故障,Docker 在另一个节点上启动一个新容器,但是该容器具有不同的随机主机名。

由于 RabbitMQ 使用主机名来识别 RabbitMQ 集群节点,因此它无法识别新容器上的新主机名,因此它假定原始节点无限期关闭。

我尝试使用 Docker 1.13 中的新模板功能,它允许您通过--hostname="{{.Node.ID}}-{{.Service.Name}}"docker service create. 但是,您目前无法根据此自定义主机名发现容器,因此无法以这种方式创建 RabbitMQ 集群。

我希望能够在 Docker 开始运行新容器后让 RabbitMQ 自动重新加入集群节点。这可能吗?

4

1 回答 1

0

我希望能够在 Docker 开始运行新容器后让 RabbitMQ 自动重新加入集群节点。这可能吗?

我假设您的意思是“重新加入新启动的 docker 容器中存在的集群节点”。

答案 - 它不是。因为,根据定义,它不会重新加入,而只是加入,因为从 RabbitMQ 的角度来看,这只是网络中的一台新机器(计算机、vm、docker ......)。

于 2017-01-25T12:49:07.100 回答