我有三个在Swarm Mode服务中运行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集群。我的问题是,如果群集节点出现故障,Docker将在另一个节点上启动一个新容器,但是该容器具有不同的随机主机名。
由于RabbitMQ使用主机名来标识RabbitMQ集群节点,因此它无法识别新容器上的新主机名,因此假定原始节点无限期地处于关闭状态。
我尝试使用Docker 1.13中的新模板功能,该功能允许您通过在
--hostname="{{.Node.ID}}-{{.Service.Name}}"
中指定docker service create
来创建静态主机名。但是,您目前无法基于此自定义主机名发现容器,因此无法以这种方式创建RabbitMQ集群。我希望能够在Docker开始运行新容器后让RabbitMQ自动重新加入集群节点。这可能吗?
最佳答案
I want to be able to have RabbitMQ automatically re-join a cluster node after Docker starts running a new container. Is this possible?
我假设您的意思是“重新加入新启动的Docker容器中存在的群集节点”。
答案-不是。因为按照定义,它不是重新加入,而是简单地加入,因为从RabbitMQ的 Angular 来看,这只是网络中的一台新机器(计算机,vm,docker ...)。
关于docker - RabbitMQ集群如何识别Docker的容器重启?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41851243/