Windows子系统Linux版Ubuntu16.04下RabbitMQ无法通过rabbitmqctl连接问题
解决WSL Ubuntu 16.04中RabbitMQ的rabbitmqctl连接失败问题
先确认下你碰到的核心错误就是这个对吧?
Diagnostic log attempted to contact: ['rabbit@SJDEV-JWRIGHT3'] rabbit@SJDEV-JWRIGHT3: * connected to epmd (port 4369) on SJDEV-JWRIGHT3 * epmd reports node 'rabbit' running on port 25672 * TCP connection succeeded but Erlang distribution fail...
这个问题本质不是TCP连接的问题,是Erlang分布式通信的身份验证或者主机名解析出了问题——我之前在WSL环境里踩过一模一样的坑,给你几个亲测有效的解决步骤:
1. 确保Erlang Cookie匹配
Erlang分布式节点之间靠Cookie做身份验证,rabbitmqctl和RabbitMQ节点必须用相同的Cookie:
- 先找到RabbitMQ服务使用的Cookie文件,默认路径是
/var/lib/rabbitmq/.erlang.cookie - 把这个Cookie复制到你当前用户的主目录下,同时修改权限(Cookie文件权限必须是400才能生效):
sudo cp /var/lib/rabbitmq/.erlang.cookie ~/ sudo chown $USER:$USER ~/.erlang.cookie chmod 400 ~/.erlang.cookie - 重启RabbitMQ服务:
sudo service rabbitmq-server restart - 现在再尝试执行
rabbitmqctl status,应该能正常连接了
2. 修复WSL的主机名解析问题
WSL环境下主机名和本地IP的映射经常出问题,导致Erlang无法正确解析节点地址:
- 先查看当前主机名:
hostname,你这里应该输出SJDEV-JWRIGHT3 - 编辑
/etc/hosts文件,确保有以下两行映射:
在文件里添加或修改:sudo nano /etc/hosts127.0.0.1 SJDEV-JWRIGHT3 ::1 SJDEV-JWRIGHT3 - 保存退出后,杀掉epmd进程(Erlang端口映射服务):
epmd -kill - 重启RabbitMQ服务,再测试
rabbitmqctl命令
3. 强制指定RabbitMQ节点绑定到localhost
如果上面两个方法都不行,可以直接让RabbitMQ节点绑定到localhost,绕开主机名解析的问题:
- 创建或修改RabbitMQ的环境配置文件:
添加一行内容:sudo nano /etc/rabbitmq/rabbitmq-env.confNODENAME=rabbit@localhost - 重启RabbitMQ服务:
sudo service rabbitmq-server restart - 执行命令时指定节点名:
rabbitmqctl -n rabbit@localhost status
一般来说,第一个方法就能解决大部分情况,如果不行再试后面的。
内容的提问来源于stack exchange,提问作者john
相关产品推荐
相关产品推荐

