如何连接Linux上安装的RabbitMQ并解决Docker应用连接报错问题
RabbitMQ连接报错排查与解决方案
None of the specified endpoints were reachable错误本质是Docker容器内的应用无法和RabbitMQ服务端建立网络连接,可按以下步骤逐一排查解决:
第一步:校验RabbitMQ服务端运行状态
- 确认RabbitMQ服务正常启动:在部署RabbitMQ的Linux主机上执行
systemctl status rabbitmq-server,返回结果显示active (running)即为正常,若未启动执行systemctl start rabbitmq-server启动服务。 - 确认RabbitMQ端口监听地址未限制本地回环:执行
netstat -tunlp | grep 5672查看默认AMQP协议端口的监听配置,若监听地址为127.0.0.1,需要修改RabbitMQ配置文件将监听地址改为0.0.0.0或主机的实际IP,修改后重启RabbitMQ服务生效。 - 确认端口已放开:主机防火墙执行
firewall-cmd --zone=public --add-port=5672/tcp --permanent && firewall-cmd --reload放行5672端口,云服务器还需要在控制台安全组规则中添加入方向5672端口的放行规则。
第二步:校验Docker容器网络连通性
- 进入运行中的应用容器内部,执行
nc -zv <Linux主机IP> 5672测试端口连通性,若连不通首先确认配置的连接IP不是127.0.0.1:Docker容器内的127.0.0.1指向容器本身,并非宿主机,必须填写Linux主机的内网IP/公网IP。 - 若RabbitMQ和Docker部署在同一台Linux主机上,也可填写Docker网桥的默认网关
172.17.0.1访问宿主机服务,网关地址可通过docker network inspect bridge确认。
第三步:校验RabbitMQ连接配置
- 确认配置的用户名、密码对目标vhost有访问权限:在Linux主机执行
rabbitmqctl list_permissions -p <你的vhost名称>查看权限,若无权限执行rabbitmqctl set_permissions -p <vhost名称> <用户名> ".*" ".*" ".*"完成授权。 - 确认参数配置无误:不要误将管理后台端口15672作为程序连接端口,程序连接默认使用5672端口;若开启了TLS连接需要同步配置对应的证书参数,vhost名称、用户名密码注意大小写和拼写正确性。
第四步:特殊场景兼容方案
如果上述排查都完成仍无法连接,可将Docker容器启动参数增加--network host使用主机网络模式,容器将共享宿主机的网络栈,直接使用127.0.0.1即可访问宿主机上的RabbitMQ服务。
注意:host网络模式仅支持Linux环境下的Docker,Windows和Mac系统的Docker不支持该模式实现宿主机网络互通。
内容的提问来源于stack exchange,提问作者Neethi Soman
相关产品推荐
相关产品推荐

