我试图在每台机器上使用Docker创建一个带有节点的RabbitMQ群集,并且我在连接节点时遇到了一些问题。 当我获得rabbitMQ主机名时,它只引用容器,因此当我尝试将节点加入群集时,它失败了,因为它无法找到域。我怎么能告诉RabbitMQ主机名实际服务器的IP?
我试图将一台服务器中的节点与另一台外部服务器的节点连接起来,两者都是EC2实例,但是哪些信息应该有关于EC2实例主机的RabbitMQ主机名能够从外部连接?
如果我使用ip-172-31-12-135.us-west-1.compute.internal,则会失败......
答案 0 :(得分:1)
为了创建集群,所有要形成集群的rabbitmq节点必须可以通过节点名称(主机名)访问。
您需要为每个具有--hostname
选项的docker容器指定主机名,并为所有其他容器添加/ etc / host条目,这可以使用--add-host
选项或手动编辑/ etc / hosts文件。
所以,这是一个带有docker容器的3个rabbitmq节点集群的示例(rabbitmq:3-management image):
首先创建一个网络,以便您可以分配IP:docker network create --subnet=172.18.0.0/16 mynet1
。我们将有以下内容:
旋转第一个
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网络,因此应使用overlay network。