RabbitMQ集群如何识别Docker的容器重启?

我有三个复制容器在Swarm Mode服务中运行RabbitMQ。 每个容器充当RabbitMQ节点来创buildRabbitMQ集群。 docker service create为此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成功创build一个RabbitMQ集群。

我的问题是,如果一个swarm节点closures,Docker会在另一个节点上启动一个新的容器,但容器有一个不同的随机主机名。

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

我尝试在Docker 1.13中使用新的模板function,通过在--hostname="{{.Node.ID}}-{{.Service.Name}}" create中指定--hostname="{{.Node.ID}}-{{.Service.Name}}"来创build静态主机名。 但是,您目前无法根据此自定义主机名来发现容器,因此无法以此方式创buildRabbitMQ群集。

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

I want to be able to have RabbitMQ automatically re-join a cluster node after Docker starts running a new container. Is this possible?

我假设你的意思是re-join a cluster node existing in the newly started docker container

答案 – 不是。 因为根据定义, 它不会被重新join,而只是从rabbitmq的angular度来看,这只不过是networking中的一台新机器(电脑,虚拟机,dokcer …)。