
[英]Using RabbitMQ in for communication between different Docker container
[英]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与服务器不匹配)
- 目标节点未运行
除了下面的诊断信息:
- 有关更多信息,请参见http://rabbitmq.com/documentation.html上的CLI,群集和联网指南。
- 在节点Rabbitmq @ rabbitmq上查询服务器日志
诊断学
尝试联系:[rabbitmq @ rabbitmq]
rabbitmq @ rabbitmq:*已连接到rabbitmq上的epmd(端口4369)* epmd报告:node'rabbitmq'不在rabbitmq的所有其他节点上运行:[rabbit] *建议:启动节点
当前节点详细信息:*节点名称:rabbitmqcli52 @ e3ea1e73df02 *有效用户的主目录:/ var / lib / rabbitmq * Erlang cookie哈希:AB9AFN3zvcyAWBl6ZVVOJw ==
首先创建一个网络,以便您可以分配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.