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 …)。
- Docker for Windows – 调用部署在另一个容器上的另一个Java应用程序时,部署在容器上的Java应用程序获取连接拒绝错误
- Noob FED试图运行Docker端口映射上的MeanJS应用程序抛出错误
- 挂载path中的单个节点本地kubernetes持续卷文件正从容器中删除
- 在Docker中运行的GitLab Docker Registry
- 在unix:///var/run/docker.sock中无法连接到Docker守护进程。 docker守护程序正在运行
- 使用Vagrant + Docker在本地开发木偶
- Docker-selenium-chrome查看浏览器
- Docker:多个MySQL实例/容器 – 第二个从属超时
- 如何在Boot2docker中创buildDockerfile来创build映像
- 使用moodle 3.3.2通过自定义的docker映像与fpm:无尽的303redirect循环
- kube-controller-manager将一个pod从closures节点迁移到另一个健康节点需要多长时间