🚀 Docker Compose 部署 RocketMQ 5.4.0 完整指南(Windows Docker Desktop 专属)
您已经掌握了 Compose 语法,现在我们手把手部署 RocketMQ 5.4.0!全程针对 Windows Docker Desktop 优化,避开所有坑!
📁 第一步:创建项目目录(关键!避免权限问题)
powershell
# 在 C 盘用户目录创建(Docker Desktop 默认共享,最安全!)
cd C:\Users\$env:USERNAME
mkdir rocketmq-5.4.0
cd rocketmq-5.4.0
# 创建必要子目录
mkdir conf, logs, store, html
💡 为什么必须在 C 盘用户目录?
Docker Desktop for Windows 默认只共享 C:\Users,放这里 100% 避免挂载失败!
不选择在C盘也可以,但需要注意权限问题,有时候文件可能没有读写权限导致无法运行
📝 第二步:创建配置文件(3 个文件)
1️⃣ 创建 docker-compose.yml(复制粘贴即可)
yaml
version: '3.8'
services:
rmqnamesrv:
image: apache/rocketmq:5.4.0
container_name: rmqnamesrv
ports:
- "9876:9876"
volumes:
- ./logs/namesrv:/home/rocketmq/logs
- ./store/namesrv:/home/rocketmq/store
command: sh mqnamesrv
networks:
rmq-net:
aliases:
- namesrv
rmqbroker:
image: apache/rocketmq:5.4.0
container_name: rmqbroker
ports:
- "10909:10909" # HA 端口
- "10911:10911" # 服务端口
- "10912:10912" # VIP 通道端口
volumes:
- ./logs/broker:/home/rocketmq/logs
- ./store/broker:/home/rocketmq/store
- ./conf/broker.conf:/etc/rocketmq/broker.conf
environment:
NAMESRV_ADDR: "namesrv:9876"
JAVA_OPTS: "-Duser.home=/home/rocketmq"
JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn128m"
depends_on:
- rmqnamesrv
command: sh mqbroker -c /etc/rocketmq/broker.conf
networks:
rmq-net:
aliases:
- broker
rmqconsole:
image: apacherocketmq/rocketmq-console:2.0.0
container_name: rmqconsole
ports:
- "8098:8080"
environment:
JAVA_OPTS: "-Drocketmq.namesrv.addr=namesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false"
depends_on:
- rmqnamesrv
networks:
rmq-net:
aliases:
- console
networks:
rmq-net:
driver: bridge
✅ 为什么选这些镜像?
| 服务 | 镜像 | 选择理由 |
|---|---|---|
| NameServer/Broker | foxiswho/rocketmq:5.4.0 |
社区维护最稳定,5.4.0 标签存在,路径清晰 |
| Console | apacherocketmq/rocketmq-console:5.0.0 |
官方控制台,完美支持 5.x |
2️⃣ 创建 conf/broker.conf(关键!解决连接问题)
powershell
# 在 PowerShell 中执行(自动获取本机 IP 并写入配置)
$localIp = (Get-NetIPAddress -AddressFamily IPv4 -InterfaceAlias "以太网*" | Select-Object -First 1).IPAddress
@"
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
# ⚠️ 重要:Windows Docker Desktop 必须用 host.docker.internal
brokerIP1 = host.docker.internal
listenPort = 10911
namesrvAddr = namesrv:9876
autoCreateTopicEnable = true
autoCreateSubscriptionGroup = true
flushDiskType = ASYNC_FLUSH
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
diskMaxUsedSpaceRatio = 95
"@ | Out-File -FilePath conf\broker.conf -Encoding utf8
🔥 核心知识点:
brokerIP1 = host.docker.internal→ Windows Docker Desktop 专属魔法 !- 容器内通过此域名自动解析到宿主机 Windows 系统
- 生产者/消费者(在 Windows 本机运行)可通过
localhost:10911连接 - 控制台容器也能通过此地址管理 Broker
namesrvAddr = namesrv:9876→ 容器间通过 Compose 网络名通信(自动 DNS 解析)
💡 如果执行 PowerShell 命令失败,手动创建
conf/broker.conf,确保包含brokerIP1 = host.docker.internal
3️⃣ (可选)创建测试 HTML(验证环境)
powershell
"<h1 style='color:#1890ff;text-align:center'>✅ RocketMQ 环境准备就绪!</h1><p style='text-align:center'>控制台地址: <a href='http://localhost:8090'>http://localhost:8090</a></p>" | Out-File -FilePath html\index.html -Encoding utf8
🚦 第三步:启动服务(3 条命令搞定)
powershell
# 1. 启动所有服务(-d 后台运行)
docker-compose up -d
# 2. 查看启动状态(等待 10 秒让服务初始化)
Start-Sleep -Seconds 10
docker-compose ps
# 3. 检查关键日志(确认无报错)
docker-compose logs rmqbroker | Select-String "Register broker"
# 应看到:Register broker to name server namesrv:9876 successful
✅ 成功标志:
NAME COMMAND STATUS
rmqnamesrv "sh mqnamesrv" Up 9876/tcp
rmqbroker "mqbroker -c /etc/..." Up 10909-10912/tcp
rmqconsole "java -jar ..." Up 8080/tcp
🔍 第四步:验证部署(3 重验证)
| 验证项 | 操作 | 预期结果 |
|---|---|---|
| 1. 控制台访问 | 浏览器打开 http://localhost:8090 |
看到 RocketMQ Console 界面 |
| 2. Broker 注册 | 控制台 → 集群 → Broker | 看到 broker-a 节点(地址含 host.docker.internal) |
| 3. 本地连接测试 | 用 Java/Python 客户端连 127.0.0.1:9876 |
能创建 Topic 并收发消息 |
💡 控制台默认账号:无密码,直接登录
🛠️ 常见问题急救包(Windows 专属)
| 问题现象 | 原因 | 解决方案 |
|---|---|---|
| 挂载目录为空 | Docker 未共享项目目录 | Settings → Resources → File Sharing → 添加 C:\Users\你的名字\rocketmq-5.4.0 |
| 控制台连不上 | Broker 未注册成功 | 检查 broker.conf 中 brokerIP1 是否为 host.docker.internal |
| 端口被占用 | 其他程序占用了 9876/10911 | 修改 docker-compose.yml 中宿主机端口(如 "9877:9876") |
| 启动超时 | 内存不足 | Docker Desktop Settings → Resources → Memory 调至 4GB+ |
📌 核心原理总结(为什么这样写)
| 配置项 | 作用 | 您熟悉的 Docker 命令类比 |
|---|---|---|
networks: rmq-net |
创建专属网络 | docker network create rmq-net |
aliases: [namesrv] |
服务别名(容器内 DNS) | --network-alias namesrv |
depends_on |
启动顺序依赖 | 手动先启动 namesrv 再启动 broker |
volumes 挂载日志/存储 |
持久化数据 | -v ./logs:/home/rocketmq/logs |
brokerIP1 = host.docker.internal |
Windows 容器访问宿主机的魔法 | 无直接对应(Docker Desktop 特有) |
💡 终极提示
-
首次启动慢? → 镜像下载需要时间(约 500MB),耐心等待
-
想重置环境?
powershelldocker-compose down -v # -v 会删除挂载卷(谨慎!) docker-compose up -d -
查看实时日志 :
powershelldocker-compose logs -f rmqbroker # -f 持续跟踪
✅ 现在您只需:
- 复制上面的
docker-compose.yml和broker.conf - 执行
docker-compose up -d - 访问
http://localhost:8090
恭喜!已用 Docker Compose 成功部署 RocketMQ 5.4.0! 🎉