bash
version: '3.8'
services:
rabbitmq:
image: rabbitmq:3.8.16-management-alpine
container_name: rabbitmq
restart: unless-stopped
ports:
- "5672:5672"
- "15672:15672"
- "1883:1883"
environment:
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=admin123
- RABBITMQ_DEFAULT_VHOST=/
volumes:
- D:/Java/docker/rabbitmq/rabbitmq_data:/var/lib/rabbitmq
#- D:/Java/docker/rabbitmq/plugins:/plugins # 新增插件目录挂载
networks:
- app-network
cassandra:
image: cassandra:4.0.11
container_name: cassandra
restart: unless-stopped
ports:
- "9042:9042"
- "9160:9160"
- "7199:7199"
environment:
- CASSANDRA_CLUSTER_NAME=MyCluster
- CASSANDRA_DC=DC1
- CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch
- CASSANDRA_NUM_TOKENS=256
- MAX_HEAP_SIZE=2G
- HEAP_NEWSIZE=200M
volumes:
- D:/Java/docker/cassandra/cassandra_data:/var/lib/cassandra
# 暂时注释掉配置挂载
# - ./cassandra/cql:/cql
# - ./cassandra/cassandra.yaml:/etc/cassandra/cassandra.yaml
networks:
- app-network
# Redis 6.2.7+
redis:
image: redis:6.2.7-alpine
container_name: redis
restart: unless-stopped
ports:
- "6379:6379"
command: redis-server --requirepass your_redis_password --appendonly yes
volumes:
- D:/Java/docker/redis/redis_data:/data
- D:/Java/docker/redis/redis.conf:/usr/local/etc/redis/redis.conf
environment:
- REDIS_PASSWORD=your_redis_password
networks:
- app-network
healthcheck:
test: ["CMD", "redis-cli", "--raw", "incr", "ping"]
interval: 10s
timeout: 5s
retries: 3
# MySQL 8.0
mysql:
image: mysql:8.0
container_name: mysql
restart: unless-stopped
ports:
- "3307:3307"
environment:
MYSQL_ROOT_PASSWORD: root_password
MYSQL_DATABASE: mydb
MYSQL_USER: user
MYSQL_PASSWORD: user_password
volumes:
- D:/Java/docker/mysql/mysql_data:/var/lib/mysql
- D:/Java/docker/mysql/init:/docker-entrypoint-initdb.d
- D:/Java/docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_unicode_ci
networks:
- app-network
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 5
networks:
app-network:
driver: bridge
# 不指定子网,让 Docker 自动分配
volumes:
rabbitmq_data:
cassandra_data:
redis_data:
mysql_data:
docker-compose.yml内容如上
镜像源配置如下
bash
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.1ms.run",
"https://ccr.ccs.tencentyun.com",
"https://hub.xdark.top",
"https://hub.fast360.xyz",
"https://docker-0.unsee.tech",
"https://docker.xuanyuan.me",
"https://docker.tbedu.top",
"https://docker.hlmirror.com",
"https://doublezonline.cloud",
"https://docker.melikeme.cn",
"https://image.cloudlayer.icu",
"https://dislabaiot.xyz",
"https://freeno.xyz",
"https://docker.kejilion.pro"
]
}
给rabbitmq安装延时插件
首先下载插件:
你需要下载与 rabbitmq:3.8.16-management-alpine 版本完全匹配的插件。
-
官方 GitHub 发布地址:rabbitmq-delayed-message-exchange releases
-
找到与
3.8.x兼容的版本,通常是 v3.8.17。 -
下载文件:
rabbitmq_delayed_message_exchange-3.8.17.8f537ac.ez如果你无法访问GitHub,可以尝试使用这个国内备用链接,或将此链接复制到下载工具(如迅雷)中下载:https://objectstorage.ap-osaka-1.oraclecloud.com/n/axdwrj2s8m5s/b/rabbitmq-plugins/o/rabbitmq_delayed_message_exchange-3.8.17.8f537ac.ez
📁 步骤二:放置插件文件
将下载的 .ez 文件,放到你的 Docker 卷挂载目录:
-
放置到 :
D:/Java/docker/rabbitmq/plugins/ -
确保容器内路径 :
/plugins/rabbitmq_delayed_message_exchange-3.8.17.8f537ac.ez
复制插件文件到容器内
在 CMD 或 PowerShell 中,使用 docker cp 命令将文件复制到容器内的 /plugins/ 目录。
bash
# 在 CMD/PowerShell 中执行(注意Windows路径)
docker cp D:\Java\docker\rabbitmq\plugins\rabbitmq_delayed_message_exchange-3.8.17.8f537ac.ez rabbitmq:/plugins/
执行成功不会有提示,如果报错(如文件路径不对),请检查路径。
第三步:进入容器启用插件并重启
复制完成后,需要进入容器启用插件,然后重启容器使插件生效。
bash
# 1. 进入容器(会打开一个新的命令行)
docker exec -it rabbitmq /bin/sh
# 2. 在容器内部启用插件(你会看到成功提示)
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
# 3. 退出容器
exit
# 4. 重启容器以完全加载插件
docker restart rabbitmq
第四步:验证插件是否安装成功
容器重启后(约等10秒),运行验证命令。
bash
docker exec rabbitmq rabbitmq-plugins list | grep delayed
如果看到 [E*] rabbitmq_delayed_message_exchange 3.8.17 (带有 E* 标志),就表示插件已成功启用。
启用mqtt插件,让mqttx工具可以连接
# 在容器中列出已启用插件,查找mqtt
docker exec rabbitmq rabbitmq-plugins list | grep mqtt
-
如果没有任何输出 ,说明插件未启用。
-
如果看到
[ ] rabbitmq_mqtt,表示插件存在但未启用。 -
如果看到
[E*] rabbitmq_mqtt,表示插件已启用
如果第一步确认插件未启用,执行以下命令:
bash
# 启用MQTT插件
docker exec rabbitmq rabbitmq-plugins enable rabbitmq_mqtt
# 重启容器使插件生效
docker restart rabbitmq
# 再次确认插件状态
docker exec rabbitmq rabbitmq-plugins list | grep mqtt