参考官方文档:Docker 部署 RocketMQ | RocketMQ
5版本会报错
4.启动Broker
Win10会报错需修改如下
docker run -d `
--name rmqbroker `
--net rocketmq `
-p 10912:10912 `
-p 10911:10911 `
-p 10909:10909 `
-e "NAMESRV_ADDR=rmqnamesrv:9876" `
-v ${PWD}/broker.conf:/home/rocketmq/rocketmq-4.9.6/conf/broker.conf `
apache/rocketmq:4.9.6 sh mqbroker `
-c /home/rocketmq/rocketmq-4.9.6/conf/broker.conf
执行java程序ProducerExample报错
你的问题图解
你的本地Java程序 (IP: 192.168.1.2)
↓ 可以访问 ✅
NameServer容器 (127.0.0.1:9876) [端口映射到宿主机]
↓
NameServer查询注册表
↓
Broker注册信息: "我是Broker,我的地址是 172.18.0.3:10911"
↓
NameServer把这个地址返回给你的程序
↓
你的程序尝试连接 172.18.0.3:10911
↓
连接失败 ❌ (因为这是Docker内部IP,你的程序在Docker外部)
解决办法
需要配置 brokerIP1
步骤1:进入Broker容器修改配置
bash
# 查看容器名称或ID
docker ps
# 进入Broker容器(通常叫rmqbroker或类似名称)
docker exec -it <broker容器名或ID> /bin/bash
步骤2:修改broker.conf文件
在容器内找到并编辑配置文件:
bash
# 查找配置文件位置
find / -name "broker.conf"
# 编辑配置文件(路径可能不同,根据上面查找结果调整)
vi /home/rocketmq/rocketmq-4.9.6/conf/broker.conf
在文件末尾添加以下关键配置(使用你宿主机的真实IP):
properties
# 关键:强制Broker注册时使用宿主机IP
brokerIP1 = 你的宿主机IP地址
查看配置文件显示乱码:cat /home/rocketmq/rocketmq-4.9.6/conf/broker.conf
解决办法:覆写
echo "brokerIP1=192.168.1.2" > /home/rocketmq/rocketmq-4.9.6/conf/broker.conf
显示正确
步骤3:重启Broker容器
bash
# 退出容器
exit
# 重启容器
docker restart <broker容器名或ID>
步骤4:正确启动后显示
执行程序正常
生产消息正常
消费消息正常