一、docker 安装rabbit并且挂载数据目录
1.拉取镜像
docker pull rabbitmq:3.7.7
2.创建挂载目录(同一台机器)
mkdir /mnt/xxx/data
mkdir /mnt/xxx/logs
3. 容器启动rabbitMq
docker run -d --name test_rabbitmq3.7.7 -p 5672:5672 -p 15672:15672 -v /mnt/xxxx/data:/var/lib/rabbitmq -v /mnt/xxx/logs:/var/log/rabbitmq --hostname myRabbit -e RABBITMQ_DEFAULT_VHOST=my_vhost -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin 2888deb59dfc
下载web管理器
docker exec -it test_rabbitmq3.7.7 rabbitmq-plugins enable rabbitmq_management
注意: rabbitMq的目录 ,数据库/var/lib/rabbitmq config mnesia schema 日志/var/log/rabbitmq/log crash.log
/mnt/dockerdata/oms-rabbitmq/data 为实际存储挂载目录
对配置文件也进行挂载的话 需要声明启动rabbitmq-management 不然web访问不了(由于启动时自动生成配置 内容有web的配置信息)
如果实例多个mq:只需更改端口、名称 (例如更改端口:5673:5672 -p 15673:15672)
4.配置权限问题
5.启动实例需启动防火墙
systemctl start firewalld.service
6. 启动实例报错
com.github.dockerjava.api.exception.InternalServerErrorException: {"message":"driver failed programming external connectivity on endpoint hopeful_newton (125a1608e6258e00c570a7dba54f7c34b6be0b6cfa4870f13514f9af00d19462): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 34180 -j DNAT --to-destination 172.17.0.3:8000 ! -i docker0: iptables: No chain/target/match by that name.\n (exit status 1))
防火墙重启或关闭后,需要重新启动docker:systemctl restart docker,否则会报以上错误
7. 启动多个实例 例子
docker run -d --name test_rabbitmq3.7.7 -p 5672:5672 -p 15672:15672 -v /mnt/dockerdata/oms-rabbitmq/data:/var/lib/rabbitmq -v /mnt/dockerdata/oms-rabbitmq/logs:/var/log/rabbitmq --hostname myRabbit -e RABBITMQ_DEFAULT_VHOST=my_vhost -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin 2888deb59dfc
docker run -d --name dev_rabbitmq3.7.7 -p 5673:5672 -p 15673:15672 -v /mnt/dockerdata/oms-rabbitmq/data:/var/lib/rabbitmq -v /mnt/dockerdata/oms-rabbitmq/logs:/var/log/rabbitmq --hostname myRabbit -e RABBITMQ_DEFAULT_VHOST=my_vhost -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin 2888deb59dfc
8. 程序连不上rabbitmq问题
报错信息:
method<connection.close>(reply-code=530, reply-text=NOT_ALLOWED - vhost /my_vhost not found, class-id=10, method-id=40)
由于默认的虚拟主机是 my_Vhost,程序连不上虚拟主机,需要创建 virtual host (/)