不同docker容器中RabbitMQ的状态

不同docker容器中RabbitMQ的状态,docker,rabbitmq,docker-container,Docker,Rabbitmq,Docker Container,出于测试目的,我正在使用RabbitMQ启动docker容器。我想启动第二个容器,它运行一个短命令并检查Rabbitmq是否正在实际运行。第二个容器应该阻止我的构建管道,直到它确定RabbitMQ已在第一个容器中成功启动 如何向rabbitmqctl指定用于获取RabbitMq状态的主机名?我正在通过docker将两个容器链接在一起,因此端口问题不应成为问题 例如: rabbitmqctl -n rabbitmq status # does not work, prints diagnostic

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

如何向
rabbitmqctl
指定用于获取RabbitMq状态的主机名?
我正在通过docker将两个容器链接在一起,因此端口问题不应成为问题

例如:

rabbitmqctl -n rabbitmq status # does not work, prints diagnostic info
节点状态rabbitmq@rabbitmq ... 错误:无法在节点“”上执行操作rabbitmq@rabbitmq'. 请参阅下面的诊断信息和建议

最常见的原因是:

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

  • 有关详细信息,请参阅上的CLI、群集和网络指南
  • 查阅节点上的服务器日志rabbitmq@rabbitmq
诊断学 试图联系:[rabbitmq@rabbitmq]

rabbitmq@rabbitmq: *已连接到rabbitmq上的epmd(端口4399) *epmd报告:节点“rabbitmq”根本未运行 rabbitmq上的其他节点:[兔子] *建议:启动节点

当前节点详细信息: *节点名称: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
。我会将名称
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
然后启动带有主机名的
ubuntu1
ubuntu1con

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 

docker exec-它打印什么诊断信息?你试过
rabbit@rabbitmq
rabbitmq
是您的容器名还是映像名?@vmonteco I更新了我的问题。您是否尝试过
docker exec-ti rabbitmq rabbitmqctl status
?如果否,请尝试发布输出。@vmonteco是的,可以。