Docker安装rocketmq踩坑指南
Docker 网络
Docker容器运行的时候有host、bridge、none三种网络可供配置。
默认是bridge,即桥接网络,以桥接模式连接到宿主机;host是宿主网络,即与宿主机共用网络;none则表示无网络,容器将无法联网。
当容器使用host网络时,容器与宿主共用网络,这样就能在容器中访问宿主机网络,那么容器的localhost就是宿主机的localhost,命令--network host
,此时没有必要使用端口映射-p 80:80 -p 443:443
来映射端口,是因为本身与宿主机共用了网络,容器中暴露端口等同于宿主机暴露端口。
Docker获取rocketmq 镜像
docker search xxx
可以搜索镜像都有哪些
-
docker pull rocketmqinc/rocketmq
拉取官方镜像,注意:如果这里加上版本号,例如rocketmqinc/rocketmq:4.4.0,虽然现在测试的就是4.4.0版本,但是编辑broker.conf时候会权限不够,这里很奇怪,不知道为什么 -
docker run -itd -p 9876:9876 --name rmqnamesrv rocketmqinc/rocketmq sh mqnamesrv
开启mqnamesrv服务
镜像和上面的相同不需要重新拉取
docker run -itd -p 10911:10911 -p 10909:10909 --name rmqbroker --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=rmqnamesrv:9876" rocketmqinc/rocketmqsh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf
开启broker服务,rmqnamesrv:9876
为mqnamesrv服务的地址(容器名:端口),因为桥接了网络,才可以使用容器名:端口
修改conf/broker.conf,添加
brokerIP1=外网ip
(不能用docker的ip,即便是桥接网络也不行,必须是外网IP),然后重启broker服务
可视化界面
-
docker pull styletang/rocketmq-console-ng
拉取可视化界面镜像,这里选取star最多的镜像 -
docker run -e "JAVA_OPTS=-Drocketmq.namesrv.addr=rmqnamesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -p 8080:8080 -itd --name rocketmq-console styletang/rocketmq-console-ng
开启可视化界面服务,rmqnamesrv:9876
为mqnamesrv服务的地址(这里好像有点问题,具体我也不知道应该写docker地址还是外网地址,知道的麻烦留言告诉我)
给这三个服务创建桥接网络
docker network create my-net
# 创建了一个名为"my-net"的网络docker network connect my-net rmqnamesrv
docker network connect my-net rmqbroker
docker network connect my-net rocketmq-console
docker network inspect my-net
#查看桥接网络信息