1. 选择 Repo

nameserver: rocketmqinc/rocketmq-namesrv

broker: rocketmqinc/rocketmq-broker

查找过程中发现 rocketmqinc 官方还有一个单独的 rocketmq 仓库,但是已经很久没更新了,所以选择比较新的

2. 目录挂载映射

默认 rocketmq 日志和存储放在 home 目录,用户是 root,配置如下:

namesrv:

本机容器
/d/docker/mq/logs/root/logs
/d/docker/mq/store/root/store

broker:

本机容器
/d/docker/mq/logs/root/logs
/d/docker/mq/store/root/store
/d/docker/mq/conf/root/conf

这里一开始犯了个错误,把自定义的 broker.conf 所在 conf 目录映射到了 rocketmq 的 workspace 里,造成 conf 目录被替换,而我的配置文件只有一个 broker.conf,造成缺少其他配置文件无法启动 broker 的问题。

3. 配置 broker

本机的 conf 目录下建立自定义的 broker.conf 配置:

brokerClusterName = DefaultCluster
brokerName = broker-syf
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
brokerIP1=10.208.203.69

这里需要注意的是 brokerIP,需要指定为你的内/外网 ip。比如我连接的网络本机内网 ip 是 10.208.203.69,后面才可以用 localhost 访问,否则默认的 172.x.x.x 是容器内网 ip,离开容器在外面是访问不到的。

同时在 docker-compose.yml 文件中手动指定我们刚刚创建的 broker.conf,根据映射关系在容器中的路径是 /root/conf/broker.conf,启动命令配置如下:

sh mqbroker -n namesrv:9876 -c /root/conf/broker.conf

完整的 docker-compose.yml 文件如下:

version: '2'
services:
    namesrv:
        image: rocketmqinc/rocketmq-namesrv:4.5.0-alpine
        container_name: rmqnamesrv
        ports:
            - 9876:9876
        volumes: 
            - "/d/docker/mq/logs:/root/logs"
            - "/d/docker/mq/store:/root/store"
        command: sh mqnamesrv

    broker:
        image: rocketmqinc/rocketmq-broker:4.5.0-alpine
        container_name: rmqbroker
        ports:
            - 10909:10909
            - 10911:10911
            - 10912:10912
        volumes: 
            - "/d/docker/mq/logs:/root/logs"
            - "/d/docker/mq/store:/root/store"
            - "/d/docker/mq/conf:/root/conf"
        command: sh mqbroker -n namesrv:9876 -c /root/conf/broker.conf
        depends_on:
            - namesrv
        environment: 
            - JAVA_HOME=/usr/lib/jvm/jre

    console:
        image: styletang/rocketmq-console-ng
        container_name: rocketmq-console-ng
        ports:
            - 8080:8080
        depends_on: 
            - namesrv
        environment: 
            - JAVA_OPTS= -Dlogging.level.root=info -Drocketmq.namesrv.addr=rmqnamesrv:9876

标签: rocketmq, docker

添加新评论