ActiveMQ Classic 5.17.7 Docker Compose 部署指南

一、环境要求

项目版本
Docker20.10+
Docker Composev2+
ActiveMQ5.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

登录信息:

用户名密码
adminadmin

登录后可以管理:

  • Queues(队列)

  • Topics(主题)

  • Connections(连接)

  • Producers(生产者)

  • Consumers(消费者)

  • Subscribers(订阅者)


六、默认端口说明

端口协议说明
8161HTTPWeb 管理后台
61616OpenWireJava JMS 默认连接端口
5672AMQPAMQP 协议
1883MQTTMQTT 协议
61613STOMPSTOMP 协议
61614WebSocketSTOMP 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)