Docker使用docker-compose搭建部署 RocketMQ 出现broker 253退出问题解决

文章讲述了在Docker环境下配置并启动RocketMQ时遇到的问题,即rmqbroker容器因权限问题无法正常启动。解决方案是调整日志和存储的挂载路径,避免使用home目录,或者在Dockerfile中设置USER指令以特权用户运行进程。修改挂载路径至如/opt或/var目录后,服务成功启动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

配置文件

  rmqnamesrv:
    image: apacherocketmq/rocketmq:4.5.0
    container_name: rmqnamesrv
    ports:
    - 9876:9876
    volumes:
    - ./data/rocketmq/logs:/home/rocketmq/logs
    - ./data/rocketmq/store:/home/rocketmq/store
    command: sh mqnamesrv
    networks:
    - mq-network
  rmqbroker:
    image: apacherocketmq/rocketmq:4.5.0
    container_name: rmqbroker
    ports:
    - 10909:10909
    - 10911:10911
    - 10912:10912
    volumes:
    - ./data/rocketmq/logs:/home/rocketmq/logs
    - ./data/rocketmq/store:/home/rocketmq/store
    - ./config/rocketmq/broker.conf:/home/rocketmq/rocketmq-4.5.0/conf/broker.conf
    command: sh mqbroker -n rmqnamesrv:9876 -c ../conf/broker.conf
    depends_on:
    - rmqnamesrv
    environment:
    - JAVA_HOME=/usr/lib/jvm/jre
    networks:
    - mq-network

执行启动命令后,rmqnamesrv启动正常,rmqbroker失败,如下图
在这里插入图片描述
查看容器日志发现日志为空
解决方式:修改挂载路径如下图
在这里插入图片描述
再次启动,服务均可以正常启动
在这里插入图片描述
原因分析:这可能是因为home目录的权限限制导致的。在Docker中,每个容器都有自己的文件系统,而且默认情况下,容器内的进程以非特权用户身份运行。因此,如果您将RocketMQ的日志和存储挂载到home目录下,可能会出现权限问题,因为容器内的进程无法访问该目录。
相反,如果您将RocketMQ的日志和存储挂载到root目录下,容器内的进程就可以访问该目录,因为root用户拥有对整个文件系统的完全访问权限。
为了解决这个问题,您可以考虑将日志和存储挂载到其他目录下,例如/opt或/var。另外,您还可以通过在Dockerfile中设置USER指令,将容器内的进程以特权用户身份运行,从而避免权限问题。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值