1、先创建内部网络
yaml
docker network create --driver bridge testnetwork
2、脚本,注意:第一次启动会报错,因为找不到/home/rocketmq/rocketmq-5.3.1/conf/broker.conf,所以broker.conf需要手动创建
yaml
# broker 核心配置
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
listenPort = 10911
# 允许自动创建主题(新手必备)
autoCreateTopicEnable = true
# 允许自动创建订阅组
autoCreateSubscriptionGroup = true
# 存储路径(容器内路径,无需改)
storePathRootDir = /home/rocketmq/store
storePathCommitLog = /home/rocketmq/store/commitlog
# 关键修正:指定 Broker 注册地址为容器名(rmqbroker),而非 0.0.0.0
brokerIP1 = rmqbroker
# 关闭 VIP 通道(Dashboard 连接必备)
vipChannelEnabled = false
# 名称服务器地址(容器内指向 namesrv)
namesrvAddr = namesrv:9876
# 刷盘策略(新手用异步,性能高)
flushDiskType = ASYNC_FLUSH
# 日志保留时间(72小时)
fileReservedTime = 72
| 端口号 | 核心功能 | 单机部署必需性 | 主从部署必需性 |
|---|---|---|---|
| 10911 | 客户端主通信 | ✔️ 必需 | ✔️ 必需 |
| 10909 | VIP通道(兼容/备用) | ❌ 可选(推荐) | ❌ 可选(推荐) |
| 10912 | 主从数据同步(HA) | ❌ 可选(推荐) | ✔️ 必需端口 核心用途 单机部署是否必须 主从部署是否必须 |
yaml
version: '3.8'
services:
namesrv:
image: apache/rocketmq:5.3.1
container_name: rmqnamesrv
ports:
- "9876:9876"
networks:
- testnetwork
command: sh mqnamesrv
restart: always
broker:
image: apache/rocketmq:5.3.1
container_name: rmqbroker
ports:
- "10909:10909"
- "10911:10911"
- "10912:10912"
volumes:
- /mnt/data/rocketmq/conf:/home/rocketmq/rocketmq-5.3.1/conf
- /mnt/data/rocketmq/broker/logs:/home/rocketmq/logs
- /mnt/data/rocketmq/broker/store:/home/rocketmq/store
environment:
- NAMESRV_ADDR=namesrv:9876
depends_on:
- namesrv
networks:
- testnetwork
command: sh mqbroker -c /home/rocketmq/rocketmq-5.3.1/conf/broker.conf
restart: always
dashboard:
image: apacherocketmq/rocketmq-dashboard:latest
container_name: rmqdashboard
ports:
- "8082:8082"
networks:
- testnetwork
environment:
- "JAVA_OPTS=-Drocketmq.namesrv.addr=namesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false"
depends_on:
- namesrv
- broker
restart: always
networks:
testnetwork:
external: true
3、执行启动命令
powershell
docker-compose -f 17-rocketmq.yml up -d