配置文件
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指令,将容器内的进程以特权用户身份运行,从而避免权限问题。