Docker Compose 部署 RocketMQ 5.4.0 完整指南(Windows Docker Desktop 专属)

🚀 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.internalWindows 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.confbrokerIP1 是否为 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 特有)

💡 终极提示

  1. 首次启动慢? → 镜像下载需要时间(约 500MB),耐心等待

  2. 想重置环境?

    powershell 复制代码
    docker-compose down -v  # -v 会删除挂载卷(谨慎!)
    docker-compose up -d
  3. 查看实时日志

    powershell 复制代码
    docker-compose logs -f rmqbroker  # -f 持续跟踪

现在您只需:

  1. 复制上面的 docker-compose.ymlbroker.conf
  2. 执行 docker-compose up -d
  3. 访问 http://localhost:8090

恭喜!已用 Docker Compose 成功部署 RocketMQ 5.4.0! 🎉

相关推荐
小义_3 小时前
【Docker】知识八
linux·docker·云原生
quixoticalYan4 小时前
哈工大计算机系统大作业报告-程序人生-Hello’s P2P
linux·windows·程序人生·ubuntu·课程设计
开开心心就好5 小时前
轻松鼠标连, 自定义区域模仿人手点击
人工智能·windows·物联网·计算机视觉·计算机外设·ocr·excel
SJjiemo7 小时前
TreeSize Pro 电脑磁盘占用使用分析
windows
开开心心就好7 小时前
实用PDF擦除隐藏信息工具,空白处理需留意
运维·服务器·windows·pdf·迭代器模式·桥接模式·1024程序员节
礼拜天没时间.7 小时前
Docker Registry私有仓库搭建与使用
java·运维·docker·云原生·容器·centos
zhu62019768 小时前
Postgres数据库docker快速安装
数据库·docker·容器
十铭忘8 小时前
windows下右键没有通过Vscode打开
ide·windows·vscode
红叶尽染寂绀蓝9 小时前
已解决:同一ip下,Mac和Windows同时用vscode连接某个Linux远程服务器后,Mac再次连接时无法正确打开远程文件夹,由于转发设置导致
linux·服务器·windows·vscode·tcp/ip·macos