我正在使用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与服务器不匹配)
- 目标节点未运行
除了下面的诊断信息:
- 请参阅http://rabbitmq.com/documentation.html上的CLI,群集和网络指南以了解详情
- 查询节点rabbitmq @ rabbitmq
上的服务器日志诊断
试图联系:[rabbitmq @ rabbitmq]
的RabbitMQ @ RabbitMQ的: *连接到rabbitmq上的epmd(端口4369) * epmd报告:节点&#39; rabbitmq&#39;根本没跑 rabbitmq上的其他节点:[rabbit] *建议:启动节点
当前节点详细信息: *节点名称:rabbitmqcli52 @ e3ea1e73df02 *有效用户的主目录:/ var / lib / rabbitmq * Erlang cookie hash:AB9AFN3zvcyAWBl6ZVVOJw ==
答案 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通。