当前位置: 首页 > news >正文

我用 Docker 部署 RabbitMQ 踩了 3 个大坑,10 分钟搞定的记录

上周帮公司新同事搭RabbitMQ环境,他手动装Erlang、配依赖,折腾2小时还没跑起来。我当时就说“用Docker啊!”——结果自己上手也踩了3个坑,卡了快1小时才搞定。后来发现轩辕镜像的RabbitMQ文档写得巨清楚,连标签和端口都列得明明白白,早看文档不至于浪费时间。

装Docker时我踩的第一个坑

先交代下环境:我用的是Ubuntu 22.04,新服务器啥都没有。装Docker这步,我纠结了10分钟——用官方脚本还是轩辕的一键脚本?之前试过官方脚本,在某些国产服务器上总报“依赖不兼容”,查日志都查不出问题。后来翻轩辕文档,发现他们的一键脚本适配13种Linux发行版,包括银河麒麟这些,就试了试。

bash <(wget -qO- https://xuanyuan.cloud/docker.sh)
# 我当时跑这条命令,等了2分钟才成功,中间还以为卡了

为啥选轩辕的脚本? 实测下来有俩好处:

    1. 自动配国内加速源(阿里云+腾讯云双节点),后面拉RabbitMQ镜像能快5倍——我上次用官方源拉4.1.5-management-alpine,超时3次,换这个1分钟就拉完了。
    1. 装完直接启动Docker服务,不用手动sudo systemctl start docker,省一步是一步。

避坑提醒:执行前一定要有root权限!我同事用普通用户跑,报错“permission denied”,又折腾10分钟切用户。跑完脚本记得docker --version验证下,看到版本号再往下走。

拉镜像这块有个坑:别用latest!

Docker环境好了,该拉RabbitMQ镜像了。这里我卡了20分钟——一开始直接docker pull rabbitmq,默认拉latest标签,启动后发现没Web管理界面!查日志才看到“management plugin not found”,当时心里骂“操,白拉了”。

后来翻轩辕的tags页面,发现RabbitMQ镜像分好多种:带-management的才预装管理插件,带-alpine的是轻量版。我对比了几个版本:

  • latest:文档说可能对应测试版,体积200多MB,还没管理界面,pass;
  • 4.2.0-management:稳定版但体积180MB,比alpine版大一圈;
  • 4.1.5-management-alpine:轩辕文档标了“推荐稳定版”,体积才92MB,带管理插件,完美。

最后选了4.1.5-management-alpine,拉取命令得用轩辕的加速地址:

docker pull docker.xuanyuan.run/library/library/rabbitmq:4.1.5-management-alpine
# 我当时拉这个等了2分钟,你那边说不定更快

你别急着下一步:记一下这个标签的构成——4.1.5是版本号,management表示带Web管理界面,alpine是轻量系统。漏了management后面访问15672端口会404,我上次就是这么傻了一回。

启动命令我改了5遍才对

镜像拉好了,启动容器。这里是坑最多的地方,我前前后后改了5遍命令才成功。先上最终能用的命令,后面解释每个参数:

docker run -d \--name rabbitmq-server \--hostname rabbitmq-node1 \-p 5672:5672 \-p 15672:15672 \-v /data/rabbitmq:/var/lib/rabbitmq \-e RABBITMQ_DEFAULT_USER=admin \-e RABBITMQ_DEFAULT_PASS=admin123 \docker.xuanyuan.run/library/library/rabbitmq:4.1.5-management-alpine# 这条命令执行后,等30秒再查状态,RabbitMQ启动有点慢——我上次没等直接docker ps,以为没启动又跑一遍,结果多了个容器

参数解释+踩坑记录:

1. --hostname rabbitmq-node1 必须固定!

一开始我没加这个参数,容器重启后数据全没了。查轩辕文档才知道,RabbitMQ的数据存储路径跟节点名称(hostname)绑定,默认hostname是随机的,重启容器会变,导致数据找不到。我上次没加这个,白跑了半小时测试数据,血的教训。

2. 端口映射漏一个都不行

关键端口是5672(AMQP协议)和15672(Web管理界面),这俩必须映射。我第三次启动时漏了5672,结果应用连不上RabbitMQ,查了20分钟日志才发现“connection refused on port 5672”。轩辕文档里专门标了这俩端口是核心,千万别漏!

3. 数据挂载:-v /data/rabbitmq:/var/lib/rabbitmq

持久化配置(说白了就是数据存到宿主机,容器删了数据不丢)。我一开始用默认的匿名卷,后来容器删了想恢复数据,找不到卷在哪了,又花10分钟查docker volume ls。建议直接挂载到/data/rabbitmq这种明显的路径,后续维护方便。

4. 环境变量:默认用户名密码

RABBITMQ_DEFAULT_USERRABBITMQ_DEFAULT_PASS设管理员账号,默认的guest/guest只能本地登录,远程访问会报“user can only connect via localhost”。我第一次没设,用guest账号在浏览器登录管理界面,卡了15分钟才意识到是账号问题。

卡了40分钟的Cookie权限问题

启动命令跑完,docker ps一看,容器秒退!当时慌了,赶紧查日志:

docker logs rabbitmq-server
# 报错信息:Error: cookie file /var/lib/rabbitmq/.erlang.cookie has wrong permissions (777)

Cookie文件权限太开放了?我当时一脸懵逼,网上搜了半天,有的说改755,有的说改644,试了都不行。后来在轩辕文档的“特殊配置”里看到一句:“Erlang Cookie权限必须0600”,才恍然大悟。

解决步骤:

  1. 先把宿主机挂载目录的权限改了:
sudo chmod 0600 /data/rabbitmq/.erlang.cookie
  1. 重启容器:
docker restart rabbitmq-server

改完再docker ps,容器终于跑起来了。这40分钟真的…差点放弃用Docker部署。后来才知道,RabbitMQ的Erlang Cookie是集群通信用的,权限必须严格0600,多一点少一点都不行,这坑太隐蔽了。

测试验证:Web界面+AMQP连接都得测

容器跑起来不算完,得验证功能正常。分两步:

1. Web管理界面访问

浏览器打开 http://服务器IP:15672,用刚才设的admin/admin123登录。能看到Dashboard页面就说明管理插件没问题。
有人会问:打不开怎么办?先查docker ps看容器是不是真的在运行,再查服务器防火墙有没有开放15672端口,我上次就是忘了开防火墙,白刷新10分钟页面。

2. AMQP协议连接测试

用命令行工具rabbitmqadmin测试(管理界面自带这个工具,也可以用Python客户端):

# 先安装rabbitmqadmin(如果本地没有)
wget http://服务器IP:15672/cli/rabbitmqadmin -O /usr/local/bin/rabbitmqadmin
chmod +x /usr/local/bin/rabbitmqadmin# 创建一个测试队列
rabbitmqadmin -u admin -p admin123 -H 服务器IP declare queue name=test_queue durable=true

执行完没报错,去Web界面的“Queues”页面,能看到test_queue就说明AMQP协议(5672端口)正常。我当时执行这步报错“connection failed”,查了发现是5672端口没映射,又回去重新启动容器,亏大了。

经验沉淀:极简脚本+避坑指南

极简复现脚本(我整合时删了文档里3行没用的命令)

把上面的步骤整合成一个脚本,下次部署直接跑:

# 安装Docker(轩辕一键脚本)
bash <(wget -qO- https://xuanyuan.cloud/docker.sh)# 拉取镜像
docker pull docker.xuanyuan.run/library/library/rabbitmq:4.1.5-management-alpine# 创建数据目录并设置权限
mkdir -p /data/rabbitmq
sudo chmod 777 /data/rabbitmq  # 先给777,后面容器会生成Cookie文件再改0600# 启动容器
docker run -d \--name rabbitmq-server \--hostname rabbitmq-node1 \-p 5672:5672 \-p 15672:15672 \-v /data/rabbitmq:/var/lib/rabbitmq \-e RABBITMQ_DEFAULT_USER=admin \-e RABBITMQ_DEFAULT_PASS=admin123 \docker.xuanyuan.run/library/library/rabbitmq:4.1.5-management-alpine# 等待30秒后修复Cookie权限(关键!)
sleep 30 && sudo chmod 0600 /data/rabbitmq/.erlang.cookie && docker restart rabbitmq-server

高频问题排查(我遇到的3个坑)

1. 容器启动后秒退

  • 错误日志cookie file permissions are too open (777)
  • 排查过程:先docker logs rabbitmq-server看日志,发现Cookie权限问题,再翻轩辕文档找到“权限必须0600”,改/data/rabbitmq/.erlang.cookie权限为0600,重启容器。

2. 管理界面打不开

  • 可能原因:① 没映射15672端口;② 镜像标签没带-management;③ 防火墙没开放端口。
  • 解决docker inspect rabbitmq-server看端口映射是否有15672:15672,标签是否是management-alpine,服务器执行sudo ufw allow 15672开放端口。

3. AMQP连接报“connection refused”

  • 可能原因:5672端口没映射,或容器没启动。
  • 解决docker ps确认容器运行中,netstat -tuln看宿主机5672端口是否被监听。

生产环境优化建议(轩辕文档里提过的)

    1. 密码别写死在命令里:用Docker Secrets或环境变量文件挂载,比如-v ./rabbitmq.env:/etc/rabbitmq/env,里面存账号密码。
    1. 数据备份:定期备份/data/rabbitmq目录,RabbitMQ的数据都在这儿,丢了就麻烦了。
    1. 集群部署:如果需要高可用,参考轩辕文档的集群配置,多个节点用相同的Cookie和hostname,我还没试过,下次研究了再写教程。

写在最后

从装Docker到验证功能,总共花了不到10分钟(不算我踩坑的时间)。轩辕镜像的文档确实帮了大忙,尤其是标签说明和端口列表,比官方文档清楚多了。如果你也用Docker部署RabbitMQ,记住这几个坑:标签带management、端口别漏映射、Cookie权限0600,基本就能一次成功。

http://www.jsqmd.com/news/32427/

相关文章:

  • Ubuntu 24.04.2 LTS 中修改远程桌面(xrdp)的默认端口
  • 在远程 Ubuntu 24.04.2 LTS 上安装并运行图形界面
  • 2025年安全检测检验公司排行榜单前十名推荐
  • 2025年安全检测检验公司排行榜单权威发布
  • 常见的命名规范
  • 2025年边坡防护网优质厂家权威推荐榜单:主动防护网/被动防护网/绞索网源头厂家精选
  • 2025年冷链食品冷库供货厂家权威推荐榜单:食品级冷库/食品速冻冷库/保鲜食品冷库源头厂家精选
  • 【触想智能】工控一体机在智慧农业应用领域具有巨大的潜力和发展空间
  • Day31-C:\Users\Lenovo\Desktop\note\code\JavaSE\Basic\src\com\Regex-正则表达式+爬虫
  • 在 Ubuntu 中创建一个拥有 root 权限的 mjroot 用户并禁用root用户
  • Mac微信4.0版本多开(暂不支持防撤回)
  • 2025年低烟无卤电缆加工厂权威推荐榜单:屏蔽电缆/计算机电缆/智能电缆源头厂家精选
  • 2025年度三维扫描系统品牌推荐,结构光与非接触式三维扫描仪企业全解析
  • 2025 年 11 月立式车床,双主轴立车车床,双主轴双刀塔车铣复合车床厂家最新推荐,技术实力与市场口碑深度解析!
  • CF1272F Two Bracket Sequences
  • 低功耗LCD段码液晶驱动 VKL144A/B LCD驱动厂家
  • 在Delphi中使用连接池连接MSSQL数据库和不使用连接池连接数据库的有什么区别
  • Go红队开发—图形化界面
  • 使用FireDAC的TFDManager和TFDConnection组件实现运行时动态数据库连接
  • laas paas saas 架构说明
  • Delphi RESTful API
  • TFDMemTable 是断开性数据集
  • 2025年河南公共走廊全钢防火隔断公司权威推荐榜单:商场全钢防火隔断/公共走廊防火隔断/公共走廊防火隔墙源头厂家精选
  • 2025年板式换热机组制造厂权威推荐榜单:容积式换热机组/热力机组/换热机组源头厂家精选
  • 十四.JavaScript 简介及导入方式
  • 2025 年 11 月音乐喷泉工程,景区互动音乐喷泉,彩色灯光音乐喷泉厂家最新推荐,聚焦资质、案例、售后的五家机构深度解读!
  • 11.5 NOIP 模拟赛 T1. 荣耀
  • 智能体自动化 ui 测试
  • Windows开机自动播放视频设置
  • 2025 年 11 月倍捻机,直捻机,大卷装倍捻机厂家最新推荐,实力品牌深度解析采购无忧之选!