繁体   English   中英

RabbitMQ在不同docker容器中的状态

[英]Status of RabbitMQ in different docker container

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

如何为rabbitmqctl指定要rabbitmqctl哪个主机名来获取RabbitMq的状态? 我通过docker将两个容器链接在一起,所以端口问题应该不是问题。

例:

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

节点rabbitmq @ rabbitmq的状态...错误:无法在节点“ rabbitmq @ rabbitmq”上执行操作。 请在下面查看诊断信息和建议。

最常见的原因是:

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

除了下面的诊断信息:

诊断学

尝试联系:[rabbitmq @ rabbitmq]

rabbitmq @ rabbitmq:*已连接到rabbitmq上的epmd(端口4369)* epmd报告:node'rabbitmq'不在rabbitmq的所有其他节点上运行:[rabbit] *建议:启动节点

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

您的第二个容器需要注意第一个容器:

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

请记住, 不赞成使用容器链接,而要使用 自定义网络

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

我将假设您使用Rabbitmq管理容器,并且将其命名为(主机名) rab1 我给其他要访问rab1容器命名为ubuntu1 ,因此首先启动rab1并将ubuntu1添加到hosts文件中:

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

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

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

在启动rabbitmq容器时将rabbitmq传递--hostname rabbitmq docker run ,并确保rabbitmq容器内的hostname -s打印出rabbitmq

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM