RabbitMQ在不同docker容器

时间:2018-02-09 09:28:01

标签: docker rabbitmq docker-container

我正在使用RabbitMQ启动一个docker容器进行测试。我想启动第二个容器,它运行一个简短的命令并检查Rabbitmq是否实际运行。第二个容器应该阻止我的构建管道,直到它确定RabbitMQ已在第一个容器中成功启动。

如何指定rabbitmqctl使用哪个主机名来获取RabbitMq的状态?我通过docker将两个容器链接在一起,因此端口问题应该不是问题。< / p>

示例:

rabbitmqctl -n rabbitmq status # does not work, prints diagnostic info
  

节点rabbitmq @ rabbitmq的状态...   错误:无法在节点&#39; rabbitmq @ rabbitmq&#39;上执行操作。请参阅下面的诊断信息和建议。

     

最常见的原因是:

     
      
  • 目标节点无法访问(例如,由于主机名解析,TCP连接或防火墙问题)
  •   
  • CLI工具无法通过服务器进行身份验证(例如,由于CLI工具的Erlang cookie与服务器不匹配)
  •   
  • 目标节点未运行
  •   
     

除了下面的诊断信息:

           

诊断

     

试图联系:[rabbitmq @ rabbitmq]

     

的RabbitMQ @ RabbitMQ的:    *连接到rabbitmq上的epmd(端口4369)    * epmd报告:节点&#39; rabbitmq&#39;根本没跑                    rabbitmq上的其他节点:[rabbit]    *建议:启动节点

     

当前节点详细信息:    *节点名称:rabbitmqcli52 @ e3ea1e73df02    *有效用户的主目录:/ var / lib / rabbitmq    * Erlang cookie hash:AB9AFN3zvcyAWBl6ZVVOJw ==

3 个答案:

答案 0 :(得分:0)

你的第二个容器需要知道第一个容器:

docker run --link rabbitmq ...

主机现在可从容器内部使用:

$ grep rabbitmq /etc/hosts
172.17.0.2  rabbitmq 01ad3098b423

$ ping rabbitmq
PING rabbitmq (172.17.0.2): 56 data bytes
64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.073 ms

请注意,容器关联deprecated支持custom networks

答案 1 :(得分:0)

首先创建一个网络,以便您可以分配IP:docker network create --subnet=172.18.0.0/16 mynet1

我将假设您使用rabbitmq管理容器,并且我将其称为(主机名)rab1。我将名称ubuntu1提供给您要访问rab1的其他容器。首先启动rab1并将ubuntu1添加到主机文件中:

docker run -d --net mynet1 --ip 172.18.0.11 --hostname rab1 --add-host ubuntu1:172.18.0.12 --name rab1con -e RABBITMQ_ERLANG_COOKIE='secret cookie here' rabbitmq:3-management

然后启动ubuntu1con主机名ubuntu1

docker run -d --net mynet1 --ip 172.18.0.12 --hostname ubuntu1 --add-host rab1:172.18.0.11 --name ubuntu1con ubuntu

现在,当您进入ubuntu1con时,您可以通过姓名或IP地址访问rab1

答案 2 :(得分:0)

假设两个容器正确链接/联网,可以相互ping通,并且Rabbitmq客户端rabbitmqctl安装在第二个容器中,以下内容应该可以正常工作:

docker exec -it <second container's name or ID> rabbitmqctl -n rabbit@rabbitmq status 

启动--hostname rabbitmq容器时将docker run传递给rabbitmq,并确保hostname -s容器内的rabbitmq打印rabbitmq。< / p>

如果仍然看到错误,请在第二个容器的<IP address of rabbitmq container> rabbitmq中添加/etc/hosts并重试。

https://docs.docker.com/network/network-tutorial-standalone/#use-user-defined-bridge-networks有关于如何联网两个容器的信息,以便它们可以在同一网络上相互ping通。