在 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 successThe broker[broker-a, ...] boot success,代表服务启动成功。

2. 可视化面板验证

 在浏览器访问 http://127.0.0.1(或者替换为你的宿主机 IP):8080

        1.集群页面能看到 NameServer 和 Broker 节点在线;

        如果配置了集群应该有broker

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

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

 

 

 

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐