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

标签 docker rabbitmq docker-swarm-mode

我有三个在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/

相关文章:

rabbitmq集群加入不起作用

java - 如何从本地docker容器中运行的rabbitmq队列读取消息

docker - "swarm master"和 "swarm manager"有什么区别?

apache-flink - Flink TaskManager 无法连接到 docker swarm 任务中的 JobManager

Docker 容器驱动器与主机上的可用硬盘驱动器空间不匹配

spring - Gitlab CI 无法将 spring 应用程序连接到 postgres

node.js - 客户服务软件的聊天服务器架构

Docker 集群模式 : scale down a node and remove services

docker - 如何在 podman 容器中设置 gitlab-runner 以使用执行器选项 docker(使用 podman)

docker - 我们可以在 docker 中挂载命名卷的子目录吗?