Bitnami RabbitMQ容器配置:允许admin用户远程连接的方法
问题:Bitnami RabbitMQ 3.11 禁止admin用户远程连接
使用bitnami/rabbitmq:3.11镜像部署RabbitMQ后,自定义Python应用无法连接,报错user 'admin' can only connect via localhost。
现有配置
docker-compose.yml
version: "3.9" x-logging: &default-logging driver: journald services: python_app_example: image: python_app logging: *default-logging expose: - "32000" environment: - MINERS_RABBITMQ_URL=amqp://${RABBITMQ_USERNAME}:${RABBITMQ_PASSWORD}@${RABBITMQ_HOST}:${RABBITMQ_PORT}// command: python3 -m python_app.app healthcheck: test: [ "CMD", "nc", "-z", "-v", "localhost", "32000"] interval: 3s timeout: 3s retries: 50 depends_on: rabbitmq: condition: service_healthy networks: - rabbitmq rabbitmq: image: bitnami/rabbitmq:3.11 logging: *default-logging ports: - "29998:5672" - "15672:15672" environment: - RABBITMQ_HOST=rabbitmq - RABBITMQ_USERNAME - RABBITMQ_PASSWORD - RABBITMQ_PLUGINS=rabbitmq_management - RABBITMQ_SECURE_PASSWORD=yes - RABBITMQ_LOGS=- volumes: - 'rabbitmq_data:/bitnami/rabbitmq/mnesia' healthcheck: test: rabbitmq-diagnostics -q ping interval: 5s timeout: 5s retries: 10 networks: - rabbitmq networks: miners_server: rabbitmq: volumes: rabbitmq_data: driver: local
.env文件
RABBITMQ_HOST=rabbitmq RABBITMQ_PORT=5672 RABBITMQ_USERNAME=admin RABBITMQ_PASSWORD=admin
报错信息
Python应用启动失败报错
Connection to amqp://admin:******@rabbitmq:5672// closed. ... ProbableAuthenticationError: ('ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile.',)
RabbitMQ容器日志
2023-12-11 17:06:03.755693+00:00 [info] <0.2916.0> accepting AMQP connection <0.2916.0> (172.28.0.3:44366 -> 172.28.0.2:5672) 2023-12-11 17:06:03.756757+00:00 [error] <0.2916.0> Error on AMQP connection <0.2916.0> (172.28.0.3:44366 -> 172.28.0.2:5672, state: starting): 2023-12-11 17:06:03.756757+00:00 [error] <0.2916.0> PLAIN login refused: user 'admin' can only connect via localhost 2023-12-11 17:06:03.756857+00:00 [info] <0.2916.0> closing AMQP connection <0.2916.0> (172.28.0.3:44366 -> 172.28.0.2:5672)
尝试进入容器执行rabbitmqctl set_permissions -p / admin ".*" ".*" ".*",但操作无效且非最优解,需通过修改docker-compose.yml配置解决。
解决方案
问题根源
Bitnami的RabbitMQ镜像默认会将创建的管理员用户加入环回用户列表,限制其只能通过localhost连接,导致Docker网络内的其他服务无法正常访问。
修改docker-compose.yml配置
在rabbitmq服务的environment块中添加两项关键配置,并修正环境变量的引用方式:
修改后的rabbitmq服务环境变量
environment: - RABBITMQ_HOST=rabbitmq - RABBITMQ_USERNAME=${RABBITMQ_USERNAME} # 修正为正确引用.env中的变量 - RABBITMQ_PASSWORD=${RABBITMQ_PASSWORD} # 修正为正确引用.env中的变量 - RABBITMQ_PLUGINS=rabbitmq_management - RABBITMQ_SECURE_PASSWORD=yes - RABBITMQ_LOGS=- - RABBITMQ_LOOPBACK_USERS="" # 核心配置:清空环回用户列表,允许所有用户远程连接 - RABBITMQ_NODE_NAME=rabbit@rabbitmq # 确保节点名称与容器主机名一致,避免连接异常
生效步骤
- 清理现有容器及数据卷(旧的用户权限配置已保存在数据卷中,必须清理才能加载新配置):
docker-compose down -v
- 重新启动服务:
docker-compose up -d
配置说明
RABBITMQ_LOOPBACK_USERS="":Bitnami镜像通过该变量控制仅允许本地连接的用户列表,设为空值即可解除所有用户的本地连接限制。- 修正
RABBITMQ_USERNAME和RABBITMQ_PASSWORD的引用方式,确保容器能正确读取.env文件中的账号密码配置。 RABBITMQ_NODE_NAME=rabbit@rabbitmq:RabbitMQ节点名称需要与容器主机名匹配,否则可能出现节点识别异常,导致连接失败。
内容的提问来源于stack exchange,提问作者Kirill
相关产品推荐
相关产品推荐

