具有rabbitmq主机名的Docker容器(使用EC2服务器)

时间:2016-02-25 21:13:38

标签: amazon-web-services rabbitmq cluster-computing rabbitmqctl

我试图在每台机器上使用Docker创建一个带有节点的RabbitMQ群集,并且我在连接节点时遇到了一些问题。 当我获得rabbitMQ主机名时,它只引用容器,因此当我尝试将节点加入群集时,它失败了,因为它无法找到域。我怎么能告诉RabbitMQ主机名实际服务器的IP?

我试图将一台服务器中的节点与另一台外部服务器的节点连接起来,两者都是EC2实例,但是哪些信息应该有关于EC2实例主机的RabbitMQ主机名能够从外部连接?

如果我使用ip-172-31-12-135.us-west-1.compute.internal,则会失败......

1 个答案:

答案 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。我们将有以下内容:

  • 名为rab1con,rab2con和rab3con的3个泊坞容器
  • 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网络,因此应使用overlay network