docker启动rabbitmq命令:
#rabbitmq
docker run --name rabbitmq \
-p 5672:5672 -p 15672:15672 \
--restart=always -d --privileged=true \
-v /etc/localtime:/etc/localtime:ro \
-e TZ=Asia/Shanghai rabbitmq
docker exec -it rabbitmq /bin/bash
rabbitmq-plugins enable rabbitmq_management
exit
上述是正常普通的启动rabbitmq,默认访问账号密码是guest,使用下列脚本内容执行可实现:rabbitmq自定义配置账号密码以及固定访问ip,更安全!
deploy_rabbitmq.sh内容:
#!/bin/bash
set -e
#########################################
# 配置项
#########################################
# 允许访问 RabbitMQ 的IP 示例:"192.168.110.22 192.168.110.20"
ALLOWED_IPS="192.168.110.22"
# RabbitMQ 管理账号
RABBITMQ_USER="user"
RABBITMQ_PASS="Gp#9$Lk@2qXz!"
CONTAINER_NAME="rabbitmq"
IMAGE="rabbitmq"
#########################################
# 删除旧容器
#########################################
echo "=============================="
echo "1. 删除旧容器(如果存在)"
echo "=============================="
docker rm -f ${CONTAINER_NAME} >/dev/null 2>&1 || true
#########################################
# 启动 RabbitMQ
#########################################
echo "=============================="
echo "2. 启动 RabbitMQ 容器"
echo "=============================="
docker run -d \
--name ${CONTAINER_NAME} \
-p 5672:5672 \
-p 15672:15672 \
--restart=always \
--privileged=true \
-v /etc/localtime:/etc/localtime:ro \
-e TZ=Asia/Shanghai \
-e RABBITMQ_DEFAULT_USER=${RABBITMQ_USER} \
-e RABBITMQ_DEFAULT_PASS=${RABBITMQ_PASS} \
${IMAGE}
echo "等待 RabbitMQ 启动..."
sleep 20
#########################################
# 检查容器
#########################################
echo "=============================="
echo "3. 检查容器状态"
echo "=============================="
docker ps | grep ${CONTAINER_NAME} >/dev/null || {
echo "RabbitMQ 启动失败"
exit 1
}
#########################################
# 启用 management 插件
#########################################
echo "=============================="
echo "4. 检查 management 插件"
echo "=============================="
# 等 RabbitMQ 真正可用(关键!)
echo "等待 RabbitMQ readiness..."
for i in {1..30}; do
if docker exec ${CONTAINER_NAME} rabbitmqctl status >/dev/null 2>&1; then
echo "RabbitMQ 已就绪"
break
fi
echo "等待中... $i"
sleep 10
done
# 判断插件是否已启用(正确方式)
if docker exec ${CONTAINER_NAME} rabbitmq-plugins list | grep -q "rabbitmq_management.*E"; then
echo "rabbitmq_management 已启用"
else
echo "启用 rabbitmq_management..."
docker exec ${CONTAINER_NAME} rabbitmq-plugins enable rabbitmq_management
echo "重启 RabbitMQ..."
docker restart ${CONTAINER_NAME}
sleep 10
fi
#########################################
# 配置 DOCKER-USER 白名单
#########################################
echo "=============================="
echo "5. 配置 IP 白名单"
echo "=============================="
# 确保链存在
iptables -N DOCKER-USER 2>/dev/null || true
# 清空旧规则
iptables -F DOCKER-USER
# 放行已建立连接
iptables -A DOCKER-USER -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# 遍历白名单
for ip in $ALLOWED_IPS; do
iptables -A DOCKER-USER -s $ip -p tcp --dport 5672 -j ACCEPT
iptables -A DOCKER-USER -s $ip -p tcp --dport 15672 -j ACCEPT
done
# 拒绝其他所有
iptables -A DOCKER-USER -p tcp --dport 5672 -j DROP
iptables -A DOCKER-USER -p tcp --dport 15672 -j DROP
echo "当前 DOCKER-USER 规则:"
iptables -L DOCKER-USER -n -v --line-numbers
echo "部署完成"