RocketMQ 5.2.0 Docker Compose 部署文档


一、目录结构

创建目录:

cd rocketmq

最终目录结构:

rocketmq/
├── docker-compose.yml
├── check.sh
├── broker/
│   └── conf/
│       ├── broker.conf
│       └── plain_acl.yml.example
└── dashboard/
    └── data/
        └── users.properties


二、broker.conf

请将 brokerIP1 修改为当前服务器(或虚拟机)的 IP。

例如:

hostname -I

输出:

192.168.253.128

则配置如下:

# RocketMQ 5.4.0 Broker 简单配置

brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0

brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH

# 消息保留时间(小时)
fileReservedTime = 48
# 每天几点清理过期消息
deleteWhen = 04

# Broker 对外注册的 IP。
# 这里使用 docker compose 里固定给 broker 分配的 IP。
brokerIP1 = 172.28.0.20
listenPort = 10911
namesrvAddr = rocketmq-namesrv:9876

# 新手环境先打开自动创建, 生产环境建议改成 false
autoCreateTopicEnable = true
autoCreateSubscriptionGroup = true

# 显式指定存储目录, 确保数据落在挂载卷 ./broker/store
storePathRootDir = /home/rocketmq/store
storePathCommitLog = /home/rocketmq/store/commitlog

# 简单版先不启用 ACL。
# RocketMQ 5.4.0 推荐 ACL 2.0, 配置比 plain_acl.yml 复杂不少。
# 新手先跑通 MQ 和 Dashboard, 后续需要鉴权再单独加。
# authenticationEnabled = true
# authorizationEnabled = true


三、docker-compose.yml

# RocketMQ 5.4.0 简单版
# 包含: NameServer + Broker + Dashboard
#
# 启动: docker compose up -d
# 查看: docker compose ps
# 日志: docker compose logs -f broker
# 停止: docker compose down
#
# Dashboard: http://服务器IP:8180
# 登录账号: admin / admin123456

name: rocketmq

services:
  namesrv:
    image: apache/rocketmq:5.5.0
    container_name: rmqnamesrv
    hostname: rocketmq-namesrv
    user: root
    command: sh mqnamesrv
    restart: unless-stopped
    ports:
      - "9876:9876"
    environment:
      JAVA_OPT_EXT: "-Duser.home=/home/rocketmq -Xms512m -Xmx512m -Xmn256m"
    volumes:
      - ./namesrv/logs:/home/rocketmq/logs
    networks:
      rocketmq:
        ipv4_address: 172.28.0.10
    healthcheck:
      test: ["CMD-SHELL", "bash -c 'cat < /dev/null > /dev/tcp/127.0.0.1/9876'"]
      interval: 10s
      timeout: 5s
      retries: 12
      start_period: 20s

  broker:
    image: apache/rocketmq:5.5.0
    container_name: rmqbroker
    hostname: rocketmq-broker
    user: root
    command: sh mqbroker -c /home/rocketmq/rocketmq-5.5.0/conf/broker.conf
    restart: unless-stopped
    depends_on:
      namesrv:
        condition: service_healthy
    ports:
      - "10909:10909"
      - "10911:10911"
      - "10912:10912"
    environment:
      JAVA_OPT_EXT: "-Duser.home=/home/rocketmq -Xms1g -Xmx1g -Xmn512m"
    volumes:
      - ./broker/store:/home/rocketmq/store
      - ./broker/logs:/home/rocketmq/logs
      - ./broker/conf/broker.conf:/home/rocketmq/rocketmq-5.4.0/conf/broker.conf
    networks:
      rocketmq:
        ipv4_address: 172.28.0.20
    healthcheck:
      test: ["CMD-SHELL", "bash -c 'cat < /dev/null > /dev/tcp/127.0.0.1/10911'"]
      interval: 10s
      timeout: 5s
      retries: 12
      start_period: 40s

  dashboard:
    image: apacherocketmq/rocketmq-dashboard:latest
    container_name: rmqdashboard
    hostname: rocketmq-dashboard
    restart: unless-stopped
    depends_on:
      namesrv:
        condition: service_healthy
      broker:
        condition: service_started
    ports:
      # 宿主机 8080 经常被占用, 所以这里用 8180
      - "8180:8080"
    environment:
      JAVA_OPTS: >-
        -Drocketmq.namesrv.addr=rocketmq-namesrv:9876
        -Drocketmq.config.loginRequired=true
        -Drocketmq.config.dataPath=/tmp/rocketmq-console/data
        -Dserver.port=8080
        -Xms256m -Xmx256m
    volumes:
      - ./dashboard/data:/tmp/rocketmq-console/data
      - ./dashboard/logs:/root/logs
    networks:
      rocketmq:
        ipv4_address: 172.28.0.30

networks:
  rocketmq:
    driver: bridge
    ipam:
      config:
        - subnet: 172.28.0.0/16


四、启动

第一次部署:

docker compose up -d

重新部署:

docker compose down
docker compose up -d

查看容器:

docker ps

正常应该看到:

rmqnamesrv
rmqbroker
rmqdashboard


五、查看日志

查看 Broker:

docker logs -f rmqbroker

启动成功会看到:

The broker[broker-a, 192.168.253.128:10911] boot success.

查看 NameServer:

docker logs -f rmqnamesrv

查看 Dashboard:

docker logs -f rmqdashboard


六、访问 Dashboard

浏览器访问:

http://服务器IP:8180

例如:

http://192.168.253.128:8180


七、验证 Broker 是否注册成功

进入 Broker:

docker exec -it rmqbroker bash

执行:

mqadmin clusterList -n namesrv:9876

正常输出:

#Cluster Name    Broker Name    Broker ID

DefaultCluster   broker-a       0

说明 Broker 已成功注册到 NameServer。


八、Spring Boot 配置

application.yml:

rocketmq:
  name-server: 192.168.253.128:9876

  producer:
    group: demo-producer


九、防火墙开放(CentOS)

开放端口:

firewall-cmd --permanent --add-port=9876/tcp
firewall-cmd --permanent --add-port=10909/tcp
firewall-cmd --permanent --add-port=10911/tcp
firewall-cmd --permanent --add-port=10912/tcp
firewall-cmd --permanent --add-port=8082/tcp
firewall-cmd --reload


十、常用命令

启动:

docker compose up -d

停止:

docker compose stop

重启:

docker compose restart

查看状态:

docker ps

查看日志:

docker logs -f rmqbroker
docker logs -f rmqnamesrv
docker logs -f rmqdashboard

进入 Broker:

docker exec -it rmqbroker bash

进入 NameServer:

docker exec -it rmqnamesrv bash

删除容器:

docker compose down

删除数据(慎用):

rm -rf store/*
rm -rf logs/*


十一、端口说明

端口说明
9876NameServer
10911Broker 主端口
10909Broker VIP Channel
10912HA 同步端口
8082RocketMQ Dashboard


十二、部署成功标志

满足以下条件即表示部署成功:

  • ✅ docker ps 中存在 rmqnamesrv、rmqbroker、rmqdashboard

  • ✅ docker logs rmqbroker 显示 The broker boot success

  • ✅ mqadmin clusterList -n namesrv:9876 能查看到 Broker

  • ✅ 浏览器可以访问 http://服务器IP:8082

  • ✅ Dashboard 能正常显示 Cluster、Broker、Topic 等信息

至此,RocketMQ 5.5.0 单 Master Docker 部署完成。