为了创建一个集群,所有要组成集群的rabbitmq节点必须可以通过节点名(主机名)访问。您需要使用--hostname
选项为每个 docker 容器指定主机名,并为所有其他容器添加 /etc/host 条目,这可以使用--add-host
选项或手动编辑 /etc/hosts 文件来完成。因此,这里是一个带有 docker 容器的 3 个 rabbitmq 节点集群的示例(rabbitmq:3-management 映像):
首先创建一个网络,以便您可以分配 IP docker network create --subnet=172.18.0.0/16 mynet1
:. 我们将有以下内容:
- 3 个名为 rab1con、rab2con 和 rab3con 的 docker 容器
- IP 分别为 172.18.0.11 、 -12 和 -13
- 它们中的每一个都将分别具有主机名 rab1、rab2 和 rab3
- 所有必须共享相同的 erlang cookie
启动第一个
docker run -d --net mynet1 --ip 172.18.0.11 --hostname rab1 --add-host rab2:172.18.0.12 --add-host rab3:172.18.0.13 --name rab1con -e RABBITMQ_ERLANG_COOKIE='secret cookie here' rabbitmq:3-management
第二个
docker run -d --net mynet1 --ip 172.18.0.12 --hostname rab2 --add-host rab1:172.18.0.11 --add-host rab3:172.18.0.13 --name rab2con -e RABBITMQ_ERLANG_COOKIE='secret cookie here' rabbitmq:3-management
最后一个
docker run -d --net mynet1 --ip 172.18.0.13 --hostname rab3 --add-host rab2:172.18.0.12 --add-host rab1:172.18.0.11 --name rab3con -e RABBITMQ_ERLANG_COOKIE='secret cookie here' rabbitmq:3-management
比在容器 rab2con 中做
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@rab1
rabbitmqctl start_app
在 rab3con 中也是如此,仅此而已。
编辑:由于问题是关于 milti-host docker 网络,因此应该使用覆盖网络。