Docker搭建ActiveMQ
ActiveMQ Classic 5.17.7 Docker Compose 部署指南
一、环境要求
| 项目 | 版本 |
|---|---|
| Docker | 20.10+ |
| Docker Compose | v2+ |
| ActiveMQ | 5.17.7 |
| 操作系统 | Linux(CentOS、Rocky、Ubuntu 等) |
二、目录结构
创建项目目录:
activemq/ ├── docker-compose.yml ├── data/ └── logs/
创建目录:
mkdir -p activemq/{data,logs}
cd activemq三、编写 docker-compose.yml
创建 docker-compose.yml 文件。
services: activemq: image: apache/activemq-classic:5.17.7 container_name: activemq restart: unless-stopped hostname: activemq ports: - "8161:8161" # Web Console - "61616:61616" # OpenWire(JMS) - "5672:5672" # AMQP - "1883:1883" # MQTT - "61613:61613" # STOMP - "61614:61614" # WebSocket environment: TZ: Asia/Shanghai ACTIVEMQ_ADMIN_LOGIN: admin ACTIVEMQ_ADMIN_PASSWORD: admin volumes: - ./data:/opt/apache-activemq/data - ./logs:/opt/apache-activemq/log networks: - activemq networks: activemq: driver: bridge
四、启动服务
后台启动:
docker compose up -d
查看运行状态:
docker ps
查看日志:
docker logs -f activemq
启动成功时会看到类似信息:
INFO | Apache ActiveMQ 5.17.7 started INFO | Listening for connections at: tcp://0.0.0.0:61616
五、访问管理后台
浏览器访问:
http://服务器IP:8161
例如:
http://192.168.1.100:8161
登录信息:
| 用户名 | 密码 |
|---|---|
| admin | admin |
登录后可以管理:
Queues(队列)
Topics(主题)
Connections(连接)
Producers(生产者)
Consumers(消费者)
Subscribers(订阅者)
六、默认端口说明
| 端口 | 协议 | 说明 |
|---|---|---|
| 8161 | HTTP | Web 管理后台 |
| 61616 | OpenWire | Java JMS 默认连接端口 |
| 5672 | AMQP | AMQP 协议 |
| 1883 | MQTT | MQTT 协议 |
| 61613 | STOMP | STOMP 协议 |
| 61614 | WebSocket | STOMP over WebSocket |
如果仅使用 Spring Boot JMS,可只开放:
ports: - "8161:8161" - "61616:61616"
七、数据持久化
数据目录:
./data
日志目录:
./logs
其中消息数据保存在:
data/kahadb/
删除容器不会影响数据,只要保留 data 目录即可。
八、常用 Docker 命令
启动:
docker compose up -d
停止:
docker compose stop
重启:
docker compose restart
关闭并删除容器:
docker compose down
查看日志:
docker logs -f activemq
查看容器:
docker ps
进入容器:
docker exec -it activemq bash
九、Spring Boot 配置示例
application.yml
spring: activemq: broker-url: tcp://192.168.1.100:61616 user: admin password: admin
application.properties
spring.activemq.broker-url=tcp://192.168.1.100:61616 spring.activemq.user=admin spring.activemq.password=admin
十、防火墙开放端口(CentOS/Rocky)
开放管理后台:
firewall-cmd --permanent --add-port=8161/tcp
开放 JMS:
firewall-cmd --permanent --add-port=61616/tcp
开放其它协议(按需):
firewall-cmd --permanent --add-port=5672/tcp firewall-cmd --permanent --add-port=1883/tcp firewall-cmd --permanent --add-port=61613/tcp firewall-cmd --permanent --add-port=61614/tcp
重新加载:
firewall-cmd --reload
查看已开放端口:
firewall-cmd --list-ports
十一、升级版本
修改镜像版本:
image: apache/activemq-classic:5.17.7
例如升级到:
image: apache/activemq-classic:5.18.6
然后执行:
docker compose pull docker compose up -d
十二、常见问题
1. Docker Hub 拉取失败
错误:
Get "https://registry-1.docker.io/v2/": Client.Timeout exceeded while awaiting headers
解决方法:
配置 Docker 镜像加速器或检查服务器网络。
2. KahaDB 被锁
错误:
Database .../kahadb/lock is locked by another server.
原因:
已有 ActiveMQ 实例正在使用数据目录。
上次异常退出遗留锁文件。
解决:
停止容器:
docker compose down
如果没有重要数据,可清空数据目录:
rm -rf data/*
重新启动:
docker compose up -d
3. 使用错误的镜像名称
错误示例:
image: apache/activemq:5.17.7
推荐使用官方 ActiveMQ Classic 镜像:
image: apache/activemq-classic:5.17.7
4. Web 后台无法访问
检查:
容器状态:
docker ps
端口监听:
ss -lntp | grep 8161
浏览器访问:
http://服务器IP:8161
十三、目录备份
建议定期备份:
activemq/ ├── docker-compose.yml ├── data/ └── logs/
重点备份:
data/
恢复时只需保留 data 目录,再执行:
docker compose up -d
即可恢复全部消息及 Broker 数据。
十四、参考信息
ActiveMQ Classic:5.17.7
管理后台:http://服务器IP:8161
默认用户名:admin
默认密码:admin
数据存储:KahaDB
默认协议:OpenWire (61616)