docker容器安装部署rocketmq
- docker拉取rcketmq镜像
- 运行中可能出现的问题
docker拉取rcketmq镜像
1、搜索rocketmq镜像
docker search rocketmq
2、拉取镜像
docker pull rocketmqinc/rocketmq
3、创建挂载文件目录
mkdir -p /docker/rocketmq/nameserver/logs /docker/rocketmq/nameserver/store
4、创建namesrv(需要加权的话前面加个sudo,无需挂载目录可以将 -v 参数去掉)
docker run -d --restart=always --name rmqnamesrv --privileged=true -p 9876:9876 -v /docker/rocketmq/nameserver/logs:/root/logs -v /docker/rocketmq/nameserver/store:/root/store -e "MAX_POSSIBLE_HEAP=100000000" rocketmqinc/rocketmq sh mqnamesrv
参数说明:
-d 以守护进程的方式启动
--restart=always docker重启时候容器自动重启
--name rmqnamesrv 把容器的名字设置为rmqnamesrv -p 9876:9876 把容器内的端口9876挂载到宿主机9876上面
-v /docker/rocketmq/nameserver/logs:/root/logs 目录挂载
-v /docker/rocketmq/nameserver/store 目录挂载 rmqnamesrv 容器的名字
-e “MAX_POSSIBLE_HEAP=100000000” 设置容器的最大堆内存为100000000
rocketmqinc/rocketmq 使用的镜像名称 sh mqnamesrv 启动namesrv服务
4、创建broker
docker run --restart=always --name rmqbroker --link rmqnamesrv:namesrv -p 10911:10911 -p 10909:10909 --privileged=true -e "NAMESRV_ADDR=namesrv:9876" -e "MAX_POSSIBLE_HEAP=200000000" -itd rocketmqinc/rocketmq sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf
参数说明:
-itd it使用交互式方式运行 d后台运行
--restart=always docker重启时候容器自动重启
--name rmqbroker 把容器的名字设置为rmqbroker
--link rmqnamesrv:namesrv 和rmqnamesrv容器通信
-p 9876:9876 把容器内的端口9876挂载到宿主机9876上面
-p 10909:10909 把容器的vip通道端口挂载到宿主机
-e “NAMESRV_ADDR=namesrv:9876” 指定namesrv的地址为本机namesrv的ip地址:9876
-e “MAX_POSSIBLE_HEAP=200000000” rocketmqinc/rocketmq sh mqbroker 指定broker服务的最大堆内存
rocketmqinc/rocketmq 使用的镜像名称
sh mqbroker -c /opt/docker/rocketmq/broker.conf 指定配置文件启动broker节点
这样就可以连接了
broker.conf 配置文件(文件位置:容器内 /opt/rocketmq/conf/broker.conf)里需加入一个配置 : autoCreateTopicEnable = true 这样才会自动创建topic
运行中可能出现的问题
1、我在创建broker创建namesrv和broker的时候没有进行目录挂载,如果有失败的可以把目录挂载去掉然后通过如下命令将文件复制到容器中
#从宿主机复制文件到容器(前面宿主机,后面为容器 centos为容器名)
sudo docker cp 目录/文件 centos:目录
#从容器复制文件到宿主机(前面容器,后面为宿主机 centos为容器名)
sudo docker cp centos:目录/文件 目录
2、我们使用docker exec -it /bin/bash 命令进入broker容器内时可能会出现如下错误:
Error response from daemon: Container XXX is restarting, wait until the container is running
我使用 docker logs 容器id 打印日志并没有打印出来什么,猜测可能是一直在循环启动(具体原因未知,没有进行排查) 就把启动容器命令中的 --restart=always 自动重启给去掉了,再次运行成功