You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose部署RabbitMQ遇no_such_vhost错误,求配置修改方案

如何配置Docker Compose让RabbitMQ启动后自动创建myqueue队列?

问题背景

需要编写Docker Compose配置,使RabbitMQ容器启动后直接可用名为myqueue的队列。当前配置启动时报错no_such_vhost,<<"/">>,已尝试两种方案未解决。

当前Docker Compose配置

version: '3.8'

services:
  rabbitmq:
    image: "rabbitmq:latest"
    ports:
      - "5672:5672"
      - "15672:15672"
    environment:
      RABBITMQ_DEFAULT_USER: user
      RABBITMQ_DEFAULT_PASS: pass
      RABBITMQ_DEFAULT_VHOST: /
    volumes:
      - type: bind
        source: rabbitmq-enabled-plugins
        target: /etc/rabbitmq/enabled_plugins
      - type: bind
        source: rabbitmq.config
        target: /etc/rabbitmq/rabbitmq.config
      - type: bind
        source: rabbitmq-defs.json
        target: /etc/rabbitmq/rabbitmq-defs.json

配套文件内容

rabbitmq-enabled-plugins

[rabbitmq_management].

rabbitmq.config

[
  {
    rabbit,
      [
        {default_user, <<"user">>},
        {default_pass, <<"pass">>},
        {default_vhost, <<"/">>},
        { loopback_users, [] }
      ]
  },
  {
    rabbitmq_management,
      [
        { load_definitions, "/etc/rabbitmq/rabbitmq-defs.json" }
      ]
  }
].

rabbitmq-defs.json

{
  "exchanges": [
    {
      "name": "myqueue",
      "vhost": "/",
      "type": "fanout",
      "durable": true,
      "auto_delete": false,
      "internal": false,
      "arguments": {}
    }
  ],
  "queues": [
    {
      "name": "myqueue",
      "vhost": "/",
      "durable": true,
      "auto_delete": false,
      "arguments": {}
    }
  ],
  "bindings": [
    {
      "source": "myqueue",
      "vhost": "/",
      "destination": "myqueue",
      "destination_type": "queue",
      "routing_key": "*",
      "arguments": {}
    }
  ]
}

启动报错信息

BOOT FAILED
===========
Exception during startup:
exit:{error,{no_such_vhost,<<"/">>}}
    rabbit_boot_steps:-run_step/2-lc$^0/1-0-/2, line 45
    rabbit_boot_steps:run_step/2, line 48
    rabbit_boot_steps:-run_boot_steps/1-lc$^0/1-0-/1, line 19
    rabbit_boot_steps:run_boot_steps/1, line 20
    rabbit:start/2, line 958
    application_master:start_it_old/4, line 293
Kernel pid terminated (application_controller) ({application_start_failure,rabbit,{{error,{no_such_vhost,<<"/">>}},{rabbit,start,[normal,[]]}}})

已尝试的无效方案

  • 移除rabbitmq-defs.json中的vhost字段,无效果
  • 尝试通过Dockerfile解决,但遇到curl相关问题,方案不够优雅

解决方法

报错原因是RabbitMQ加载定义文件的步骤早于默认vhost的创建流程,导致定义中的队列/交换机找不到对应的vhost。以下是两种可行的修复方案:

方案1:调整配置加载顺序,优先创建默认vhost

删除rabbitmq.config中关于default_user、default_pass、default_vhost的配置,保留环境变量中的配置。环境变量的初始化逻辑会先于定义文件加载,确保默认vhost和用户先被创建:

修改后的rabbitmq.config:

[
  {
    rabbit,
      [
        { loopback_users, [] }
      ]
  },
  {
    rabbitmq_management,
      [
        { load_definitions, "/etc/rabbitmq/rabbitmq-defs.json" }
      ]
  }
].

Docker Compose中的环境变量保持不变,无需修改。

方案2:在定义文件中显式声明vhost、用户和权限

修改rabbitmq-defs.json,添加vhosts、users和permissions节点,确保所有依赖资源都在定义文件中存在:

{
  "vhosts": [
    {
      "name": "/",
      "tags": ""
    }
  ],
  "users": [
    {
      "name": "user",
      "password_hash": "pbkdf2_sha256$150000$你的密码哈希值",
      "hashing_algorithm": "pbkdf2_sha256",
      "tags": "administrator"
    }
  ],
  "permissions": [
    {
      "user": "user",
      "vhost": "/",
      "configure": ".*",
      "write": ".*",
      "read": ".*"
    }
  ],
  "exchanges": [
    {
      "name": "myqueue",
      "vhost": "/",
      "type": "fanout",
      "durable": true,
      "auto_delete": false,
      "internal": false,
      "arguments": {}
    }
  ],
  "queues": [
    {
      "name": "myqueue",
      "vhost": "/",
      "durable": true,
      "auto_delete": false,
      "arguments": {}
    }
  ],
  "bindings": [
    {
      "source": "myqueue",
      "vhost": "/",
      "destination": "myqueue",
      "destination_type": "queue",
      "routing_key": "*",
      "arguments": {}
    }
  ]
}

注意:password_hash需要替换为实际密码的哈希值,可通过以下命令生成:

rabbitmqctl hash_password pass

验证方法

启动容器后,访问http://localhost:15672,使用user/pass登录管理后台,查看Queues和Exchanges标签页,确认myqueue队列、交换机及绑定关系已正确创建。

内容的提问来源于stack exchange,提问作者Ta3ik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 05:17:07