在Docker中搭建rabbit MQ集群 (Mac + OrbStack)

我以为用docker搭建一个rabbitMq集群会非常简单,但是结果却出乎意料,我花了差不多两个半天才搞定。这还是依赖了AI的协助,否则难度不敢想象。

我的环境是Mac上的OrbStack。用了Kimi + 文心一言 + ChatGPT + Claude,还是Kimi价值最大。

back and forth 的过程就不讲了,这里直接说一下正确步骤。

创建docker-compose文件

既然是集群,肯定要用到docker-compose了。

建一个文件夹,比如叫rabbit3.

在里面创建docker-compose.yml:

yml 复制代码
version: '3'
services:
  rabbitmq1:
    image: rabbitmq:3.6-management
    hostname: rabbitmq1
    environment:
      - RABBITMQ_ERLANG_COOKIE='secretcookie'
      - RABBITMQ_DEFAULT_USER=guest
      - RABBITMQ_DEFAULT_PASS=guest
      - AUTOCLUSTER_TYPE=docker
      - AUTOCLUSTER_DISCOVERY_NODE=rabbitmq1
    ports:
      - "5672:5672"
      - "15672:15672"
    volumes:
      - ./data/rabbitmq1:/var/lib/rabbitmq
    networks:
      - rabbitmq-cluster

  rabbitmq2:
    image: rabbitmq:3.6-management
    hostname: rabbitmq2
    environment:
      - RABBITMQ_ERLANG_COOKIE='secretcookie'
      - RABBITMQ_DEFAULT_USER=guest
      - RABBITMQ_DEFAULT_PASS=guest
      # - RABBITMQ_CLUSTER_FORMATION_PEER_DISCOVERY=docker
      - AUTOCLUSTER_TYPE=docker
      - AUTOCLUSTER_DISCOVERY_NODE=rabbitmq1
    volumes:
      - ./data/rabbitmq2:/var/lib/rabbitmq
    networks:
      - rabbitmq-cluster
    ports:
      - "15673:15672"
      - "5673:5672"
    depends_on:
      - rabbitmq1
    links:
      - rabbitmq1

  rabbitmq3:
    image: rabbitmq:3.6-management
    hostname: rabbitmq3
    environment:
      - RABBITMQ_ERLANG_COOKIE='secretcookie'
      - RABBITMQ_DEFAULT_USER=guest
      - RABBITMQ_DEFAULT_PASS=guest
      # - RABBITMQ_CLUSTER_FORMATION_PEER_DISCOVERY=docker
      - AUTOCLUSTER_TYPE=docker
      - AUTOCLUSTER_DISCOVERY_NODE=rabbitmq1
    volumes:
      - ./data/rabbitmq3:/var/lib/rabbitmq
    networks:
      - rabbitmq-cluster
    ports:
      - "15674:15672"
      - "5674:5672"
    depends_on:
      - rabbitmq1
    links:
      - rabbitmq1



networks:
  rabbitmq-cluster:
    external: true

最后那里是external: true是因为我自己把网络提前创建好了。如果没有的话就把最后一行删掉就行。

单独创建网络的命令是 docker network create rabbitmq-cluster。

创建集群

先执行docker-compose up -d启动容器。启动以后访问本地的15672端口,用guest账户登陆。正常应该能看到一个节点在运行。

然后进入第一个节点的控制台,分别执行

bash 复制代码
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

进入第二个和第三个节点的控制台,执行

bash 复制代码
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@rabbitmq1
rabbitmqctl start_app

完了以后控制台自动刷新应该能看到三个节点了

敢惹我?后悔也晚了

集群助手

很多资料说可以用其他途径实现,我尝试了一些,大部分没尝试。

比如文心一言说可以使用docker 镜像everestoss/rabbitmq-cluster-discovery来自动搭建集群。但是我怎么也搜不到这个镜像。

docker mirror

本来我配置了阿里的mirror,但是怎么拉也拉不下新镜像。知乎了半天找到一个https://registry.dockermirror.com,配到orbStack上替换了阿里的,速度很快。但是几个小时后也不能用了。什么情况?

控制台没法登陆

可能由于我之前测试了太多其他版本的rabbitMq,集群启动后 http://localhost:15672/ 竟然打不开。准确说是打开了啥也看不到,F12也看不到报错。最后还是靠GPT3.5说清空浏览器缓存可以了。

其他版本

我之前是下载了3.12的镜像的,但是rabbitmqctl用不了。后来试了3.13也是一样的问题。3.7和3.8的镜像创建了容器连启动都启动不了,说数据库schema不对。最后还是用了3.6。

卷数据不能留

每次创建容器之前,上一次的卷一定要删掉。我是映射到文件夹里的data目录的,开始没删发现会影响新容器。所以上面说的3.8和3.9的schema不对有可能就是这个原因。

相关推荐
可涵不会debug2 小时前
超级马里奥常驻极空间以后怎么打开?Docker运行游戏页面,手机电脑都能从浏览器进入
游戏·docker·智能手机
姜鱼问生20 小时前
网页一片白?Docker 跑 Nginx 读不到文件,403 Forbidden 排查实录
nginx·docker·容器
ms72wx21 小时前
Docker 命令学习笔记:从入门到进阶的实战指南
笔记·学习·docker
java_logo21 小时前
Docker 部署 Excalidraw:轻松搭建手绘风格白板
运维·docker·容器·excalidraw·白板·轩辕镜像
海的透彻1 天前
如何让docker容器启动时用自定义的用户
java·docker·dubbo
程序员清风1 天前
LibreChat 实战:用 Docker 搭建可扩展的多模型对话平台
运维·docker·容器
Web3&Basketball1 天前
从0到1落地AI Agent沙箱隔离Docker实战:踩坑全记录
运维·docker·容器·agent·容器安全·沙箱隔离
bluebonnet271 天前
【docker】使用regctl免安装docker下载镜像
运维·docker·容器
Java开发追求者2 天前
windows快速安装docker
windows·docker·安装·1024程序员节
骑着蜗牛撵大象3272 天前
飞牛fnOS部署Damselfly:Compose编排、照片目录与7100固定访问
java·docker·rpc·dubbo·fnos·照片管理·damselfly