Windows Docker 部署 RocketMQ 全服务全流程
在 Windows 环境下用 Docker 部署 RocketMQ 看似简单,但实际操作中容易因路径配置、命令格式、环境变量等细节踩坑。本文基于官方 apache/rocketmq:4.9.4 镜像,整理出一套完整的、可直接复制执行的部署方案,让你避开常见错误,快速搭建可用的 RocketMQ 集群。
完整部署方案(基于官方 apache/rocketmq:4.9.4 镜像)
1. 环境准备
确保 Windows Docker Desktop 已启动,有管理员权限(没有权限容易报错)
提前创建本地挂载目录(用于持久化日志和数据):(位置可自定义)
mkdir D:\docker\rocketmq\data\nameserver\logs
mkdir D:\docker\rocketmq\data\nameserver\store
mkdir D:\docker\rocketmq\data\broker\logs
mkdir D:\docker\rocketmq\data\broker\store
mkdir D:\docker\rocketmq\conf
创建自定义网络(使用网络通信):
为保证 NameServer、Broker、Console 互通,先创建专属网络:
docker network create rocketmq-net #名称可自定义,下面集群会用到
2.拉取官方镜像
docker pull apache/rocketmq:4.9.4
docker pull styletang/rocketmq-console-ng:1.0.0
3.启动 NameServer(核心:使用镜像默认路径)
官方镜像无需指定 ROCKETMQ_HOME,直接使用默认路径 /home/rocketmq 即可:
docker run -d ^
--name mqnamesrv ^
--network rocketmq-net ^
-p 9876:9876 ^
-v D:\docker-rocketmq\data\nameserver\logs:/home/rocketmq/logs ^
-v D:\docker-rocketmq\data\nameserver\store:/home/rocketmq/store ^
--restart always ^
--ulimit nofile=65535:65535 ^
-e "MAX_POSSIBLE_HEAP=512M" ^
apache/rocketmq:4.9.4 sh /home/rocketmq/bin/mqnamesrv
参数说明:
-e "MAX_POSSIBLE_HEAP=512M":限制 JVM 内存,避免 Windows 内存不足导致容器重启
--restart always:Docker 重启时自动启动 NameServer
关键说明:需指定启动脚本的绝对路径 /home/rocketmq/bin/mqnamesrv,避免因容器内环境变量缺失导致脚本找不到。
4. 配置 Broker 核心配置文件
在 D:\docker\rocketmq\conf\broker.conf (本地挂载目录地址下)中写入以下内容
windows+R输入cmd打开命令提示符后输入 ipconfig 查看你的IP

# 集群基础配置
brokerClusterName = RocketMQ-Cluster
brokerName = broker-a
brokerId = 0
brokerIP1 = 你的WLAN/以太网ip # 替换为你的宿主机IP
listenPort = 10911
namesrvAddr = mqnamesrv:9876 # 网络内直接用容器名访问NameServer
# 存储路径(对应容器内挂载目录)
storePathRootDir = /home/rocketmq/store
storePathCommitLog = /home/rocketmq/store/commitlog
storePathConsumeQueue = /home/rocketmq/store/consumequeue
storePathIndex = /home/rocketmq/store/index
storeCheckpoint = /home/rocketmq/store/checkpoint
abortFile = /home/rocketmq/store/abort
# 功能开关
autoCreateTopicEnable = true
autoCreateSubscriptionGroup = true
enablePropertyFilter = true
# 刷盘策略(平衡性能与可靠性)
flushDiskType = ASYNC_FLUSH
flushIntervalCommitLog = 500
flushIntervalConsumeQueue = 3000
# 适配Windows环境
vipChannelEnabled = false
# 事务消息配置
transactionCheckInterval = 60
transactionTimeout = 60000
5.broker容器(避免重启)
docker run -d ^
--name mqbroker-master ^
--network rocketmq-net ^
-p 10911:10911 ^
-p 10909:10909 ^
-p 10912:10912 ^
-v D:\docker\rocketmq\data\broker\logs:/home/rocketmq/logs ^
-v D:\docker\rocketmq\data\broker\store:/home/rocketmq/store ^
-v D:\docker\rocketmq\conf\broker.conf:/home/rocketmq/conf/broker.conf ^
--restart always ^
--ulimit nofile=65535:65535 ^
-e "NAMESRV_ADDR=mqnamesrv:9876" ^
-e "MAX_POSSIBLE_HEAP=1024M" ^
apache/rocketmq:4.9.4 sh /home/rocketmq/bin/mqbroker -c /home/rocketmq/conf/broker.conf
解决重启的核心点:
1.启动脚本使用绝对路径 /home/rocketmq/bin/mqbroker,确保能找到执行文件;
2.降低 MAX_POSSIBLE_HEAP 适配 Windows 容器内存限制。
6.MQConsole可视化面板
docker run -d ^
--name mqconsole ^
--network rocketmq-net ^
-p 8080:8080 ^
--restart always ^
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=mqnamesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false -Dserver.port=8080 -Drocketmq.config.isVIPChannel=false -Drocketmq.config.dataPath=/tmp/rocketmq-console/data" ^
styletang/rocketmq-console-ng:1.0.0
验证部署结果
1. 基础状态验证
# 查看容器状态
docker ps

# 检查NameServer启动日志
docker logs mqnamesrv | findstr "boot success"
# 检查Broker启动日志
docker logs mqbroker-master | findstr "boot success"


若输出 The Name Server boot success 和 The broker[broker-a, ...] boot success,代表服务启动成功。
2. 可视化面板验证
在浏览器访问 http://127.0.0.1(或者替换为你的宿主机 IP):8080:
1.集群页面能看到 NameServer 和 Broker 节点在线;

如果配置了集群应该有broker

2.Topic页面可创建 / 查询 test-topic;

3.消息页面可发送 / 消费测试消息。

更多推荐



所有评论(0)