【问题标题】:RabbitMQ fails to boot from docker-composeRabbitMQ 无法从 docker-compose 启动
【发布时间】:2022-11-09 22:34:55
【问题描述】:

我试图从 docker-compose 命令设置 rabbitmq 实例。

我的码头工人撰写 yaml

version: '3.8'

services:
  rabbitmq:
    image: rabbitmq:3-management
    hostname: rabbit
    container_name: 'rabbitmq'
    volumes:
      - ./etc/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf
      - ./data:/var/lib/rabbitmq/mnesia/rabbit@rabbit
      - ./logs:/var/log/rabbitmq/log
      - ./etc/ssl/CERT_LAB_CA.pem:/etc/rabbitmq/ssl/cacert.pem
      - ./etc/ssl/CERT_LAB_RABBITMQ.pem:/etc/rabbitmq/ssl/cert.pem
      - ./etc/ssl/KEY_LAB_RABBITMQ.pem:/etc/rabbitmq/ssl/key.pem
    ports:
      - 5672:5672
      - 15672:15672
      - 15671:15671
      - 5671:5671
    environment:
      - RABBITMQ_DEFAULT_USER=secret
      - RABBITMQ_DEFAULT_PASS=secret

当我第一次运行 docker compose up 时,一切正常。但是当我添加队列并交换(从definitions.json加载),关闭并删除容器并尝试再次docker compose时,我收到了这个错误

2022-09-29 13:32:09.522956+00:00 [notice] <0.44.0> Application mnesia exited with reason: stopped
2022-09-29 13:32:09.523096+00:00 [error] <0.229.0>
2022-09-29 13:32:09.523096+00:00 [error] <0.229.0> BOOT FAILED
2022-09-29 13:32:09.523096+00:00 [error] <0.229.0> ===========
2022-09-29 13:32:09.523096+00:00 [error] <0.229.0> Error during startup: {error,
2022-09-29 13:32:09.523096+00:00 [error] <0.229.0>                           {schema_integrity_check_failed,
2022-09-29 13:32:09.523096+00:00 [error] <0.229.0>                               [{table_missing,rabbit_listener}]}}
2022-09-29 13:32:09.523096+00:00 [error] <0.229.0>

BOOT FAILED
===========
Error during startup: {error,
                          {schema_integrity_check_failed,
                              [{table_missing,rabbit_listener}]}}

2022-09-29 13:32:10.524073+00:00 [error] <0.228.0>   crasher:
2022-09-29 13:32:10.524073+00:00 [error] <0.228.0>     initial call: application_master:init/4
2022-09-29 13:32:10.524073+00:00 [error] <0.228.0>     pid: <0.228.0>
2022-09-29 13:32:10.524073+00:00 [error] <0.228.0>     registered_name: []
2022-09-29 13:32:10.524073+00:00 [error] <0.228.0>     exception exit: {{schema_integrity_check_failed,
2022-09-29 13:32:10.524073+00:00 [error] <0.228.0>                          [{table_missing,rabbit_listener}]},
2022-09-29 13:32:10.524073+00:00 [error] <0.228.0>                      {rabbit,start,[normal,[]]}}
2022-09-29 13:32:10.524073+00:00 [error] <0.228.0>       in function  application_master:init/4 (application_master.erl, line 142)
2022-09-29 13:32:10.524073+00:00 [error] <0.228.0>     ancestors: [<0.227.0>]
2022-09-29 13:32:10.524073+00:00 [error] <0.228.0>     message_queue_len: 1
2022-09-29 13:32:10.524073+00:00 [error] <0.228.0>     messages: [{'EXIT',<0.229.0>,normal}]
2022-09-29 13:32:10.524073+00:00 [error] <0.228.0>     links: [<0.227.0>,<0.44.0>]
2022-09-29 13:32:10.524073+00:00 [error] <0.228.0>     dictionary: []
2022-09-29 13:32:10.524073+00:00 [error] <0.228.0>     trap_exit: true
2022-09-29 13:32:10.524073+00:00 [error] <0.228.0>     status: running
2022-09-29 13:32:10.524073+00:00 [error] <0.228.0>     heap_size: 2586
2022-09-29 13:32:10.524073+00:00 [error] <0.228.0>     stack_size: 28
2022-09-29 13:32:10.524073+00:00 [error] <0.228.0>     reductions: 180
2022-09-29 13:32:10.524073+00:00 [error] <0.228.0>   neighbours:
2022-09-29 13:32:10.524073+00:00 [error] <0.228.0>

这是我的 rabbitmq.conf 文件

listeners.tcp.default = 5672
listeners.ssl.default = 5671
ssl_options.cacertfile = /etc/rabbitmq/ssl/cacert.pem
ssl_options.certfile = /etc/rabbitmq/ssl/cert.pem
ssl_options.keyfile = /etc/rabbitmq/ssl/key.pem
#Generate client cert and uncomment this if client has to provide cert.
#ssl_options.verify = verify_peer
#ssl_options.fail_if_no_peer_cert = true


collect_statistics_interval = 10000

#load_definitions = /path/to/exported/definitions.json
#definitions.skip_if_unchanged = true

management.tcp.port = 15672


management.ssl.port       = 15671
management.ssl.cacertfile = /etc/rabbitmq/ssl/cacert.pem
management.ssl.certfile   = /etc/rabbitmq/ssl/cert.pem
management.ssl.keyfile    = /etc/rabbitmq/ssl/key.pem

management.http_log_dir = /var/log/rabbitmq/http

我错过了什么?

【问题讨论】:

  • 您是否尝试清空 data 文件夹并重新开始?
  • 我有。清理数据文件夹后一切正常,但我需要这个文件夹是持久性的。

标签: docker ubuntu docker-compose rabbitmq


【解决方案1】:

我遇到了同样的错误,并花了很多时间试图找出问题所在。我的配置与你的略有不同,看起来像这样:

兔子MQ:
  图片:rabbitmq:3.11.2-management-alpine
  主机名:rabbitmq
  环境:
    RABBITMQ_DEFAULT_USER:测试者
    RABBITMQ_DEFAULT_PASS:qwerty
    RABBITMQ_MNESIA_DIR:/my-custom-data-folder-path-inside-container
    RABBITMQ_NODENAME:rabbitmq
  卷:
    - 类型:绑定
      来源:/my-custom-data-folder-path-on-host
      目标:/my-custom-data-folder-path-inside-container

我不是 RabbitMQ 方面的专家,我的想法只是让 RabbitMQ 将其​​数据库保存在主机上的 /my-custom-data-folder-path-on-host 文件夹中。就像您在第一次运行时的情况一样,它能够成功启动,但是在重新启动容器后,我收到以下错误:

启动失败 启动时出错:{error, {schema_integrity_check_failed, [{table_missing,rabbit_listener}]}}我从文档中了解到rabbit_listener 是 RabbitMQ 使用的 Mnesia 数据库中的一个表,并且“侦听器”是在 RabbitMQ 中配置为接受客户端连接的 TCP 侦听器。
为了让 RabbitMQ 接受客户端连接,它需要绑定到一个或多个接口并监听(特定于协议的)端口。一个这样的接口/端口对在 RabbitMQ 用语中称为侦听器。使用 listeners.tcp.* 配置选项配置侦听器。

我想深入 Mnesia 数据库进行故障排除,但在没有 Erlang 知识的情况下无法做到这一点。似乎出于某种原因,在第一次运行 RabbitMQ 时不会创建“rabbit_listener”表,但在随后的运行中需要它。

最后,我设法通过更改我的初始配置来解决这个问题,如下所示:

服务总线:
  图片:rabbitmq:3.11.2-management-alpine
  主机名:rabbitmq
  环境:
    RABBITMQ_DEFAULT_USER:测试者
    RABBITMQ_DEFAULT_PASS:qwerty
    RABBITMQ_NODENAME:rabbitmq
  卷:
    - 类型:绑定
      来源:/my-custom-data-folder-path-on-host
      目标:/var/lib/rabbitmq

我没有覆盖RABBITMQ_MNESIA_DIR 文件夹,而是覆盖了整个/var/lib/rabbitmq。这成功了,现在我的 RabbitMQ 成功地忍受了重启。

根据您的配置,我认为如果您将./data:/var/lib/rabbitmq/mnesia/rabbit@rabbit 替换为./data:/var/lib/rabbitmq,它将解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-28
    • 2020-06-30
    • 1970-01-01
    • 2018-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多