不同docker容器中RabbitMQ的状态
出于测试目的,我正在使用RabbitMQ启动docker容器。我想启动第二个容器,它运行一个短命令并检查Rabbitmq是否正在实际运行。第二个容器应该阻止我的构建管道,直到它确定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
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
您的第二个容器需要知道第一个:
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是的,可以。