ubuntu RabbitMQ无法从停靠组合 Boot

uinbv5nw  于 2022-11-02  发布在  RabbitMQ
关注(0)|答案(1)|浏览(619)

我正在尝试从docker-compose命令设置rabbitmq示例。
我的 Docker 组成yaml

  1. version: '3.8'
  2. services:
  3. rabbitmq:
  4. image: rabbitmq:3-management
  5. hostname: rabbit
  6. container_name: 'rabbitmq'
  7. volumes:
  8. - ./etc/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf
  9. - ./data:/var/lib/rabbitmq/mnesia/rabbit@rabbit
  10. - ./logs:/var/log/rabbitmq/log
  11. - ./etc/ssl/CERT_LAB_CA.pem:/etc/rabbitmq/ssl/cacert.pem
  12. - ./etc/ssl/CERT_LAB_RABBITMQ.pem:/etc/rabbitmq/ssl/cert.pem
  13. - ./etc/ssl/KEY_LAB_RABBITMQ.pem:/etc/rabbitmq/ssl/key.pem
  14. ports:
  15. - 5672:5672
  16. - 15672:15672
  17. - 15671:15671
  18. - 5671:5671
  19. environment:
  20. - RABBITMQ_DEFAULT_USER=secret
  21. - RABBITMQ_DEFAULT_PASS=secret

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

  1. 2022-09-29 13:32:09.522956+00:00 [notice] <0.44.0> Application mnesia exited with reason: stopped
  2. 2022-09-29 13:32:09.523096+00:00 [error] <0.229.0>
  3. 2022-09-29 13:32:09.523096+00:00 [error] <0.229.0> BOOT FAILED
  4. 2022-09-29 13:32:09.523096+00:00 [error] <0.229.0> ===========
  5. 2022-09-29 13:32:09.523096+00:00 [error] <0.229.0> Error during startup: {error,
  6. 2022-09-29 13:32:09.523096+00:00 [error] <0.229.0> {schema_integrity_check_failed,
  7. 2022-09-29 13:32:09.523096+00:00 [error] <0.229.0> [{table_missing,rabbit_listener}]}}
  8. 2022-09-29 13:32:09.523096+00:00 [error] <0.229.0>
  9. BOOT FAILED
  10. ===========
  11. Error during startup: {error,
  12. {schema_integrity_check_failed,
  13. [{table_missing,rabbit_listener}]}}
  14. 2022-09-29 13:32:10.524073+00:00 [error] <0.228.0> crasher:
  15. 2022-09-29 13:32:10.524073+00:00 [error] <0.228.0> initial call: application_master:init/4
  16. 2022-09-29 13:32:10.524073+00:00 [error] <0.228.0> pid: <0.228.0>
  17. 2022-09-29 13:32:10.524073+00:00 [error] <0.228.0> registered_name: []
  18. 2022-09-29 13:32:10.524073+00:00 [error] <0.228.0> exception exit: {{schema_integrity_check_failed,
  19. 2022-09-29 13:32:10.524073+00:00 [error] <0.228.0> [{table_missing,rabbit_listener}]},
  20. 2022-09-29 13:32:10.524073+00:00 [error] <0.228.0> {rabbit,start,[normal,[]]}}
  21. 2022-09-29 13:32:10.524073+00:00 [error] <0.228.0> in function application_master:init/4 (application_master.erl, line 142)
  22. 2022-09-29 13:32:10.524073+00:00 [error] <0.228.0> ancestors: [<0.227.0>]
  23. 2022-09-29 13:32:10.524073+00:00 [error] <0.228.0> message_queue_len: 1
  24. 2022-09-29 13:32:10.524073+00:00 [error] <0.228.0> messages: [{'EXIT',<0.229.0>,normal}]
  25. 2022-09-29 13:32:10.524073+00:00 [error] <0.228.0> links: [<0.227.0>,<0.44.0>]
  26. 2022-09-29 13:32:10.524073+00:00 [error] <0.228.0> dictionary: []
  27. 2022-09-29 13:32:10.524073+00:00 [error] <0.228.0> trap_exit: true
  28. 2022-09-29 13:32:10.524073+00:00 [error] <0.228.0> status: running
  29. 2022-09-29 13:32:10.524073+00:00 [error] <0.228.0> heap_size: 2586
  30. 2022-09-29 13:32:10.524073+00:00 [error] <0.228.0> stack_size: 28
  31. 2022-09-29 13:32:10.524073+00:00 [error] <0.228.0> reductions: 180
  32. 2022-09-29 13:32:10.524073+00:00 [error] <0.228.0> neighbours:
  33. 2022-09-29 13:32:10.524073+00:00 [error] <0.228.0>

这是我的rabbitmq.conf文件

  1. listeners.tcp.default = 5672
  2. listeners.ssl.default = 5671
  3. ssl_options.cacertfile = /etc/rabbitmq/ssl/cacert.pem
  4. ssl_options.certfile = /etc/rabbitmq/ssl/cert.pem
  5. ssl_options.keyfile = /etc/rabbitmq/ssl/key.pem
  6. # Generate client cert and uncomment this if client has to provide cert.
  7. # ssl_options.verify = verify_peer
  8. # ssl_options.fail_if_no_peer_cert = true
  9. collect_statistics_interval = 10000
  10. # load_definitions = /path/to/exported/definitions.json
  11. # definitions.skip_if_unchanged = true
  12. management.tcp.port = 15672
  13. management.ssl.port = 15671
  14. management.ssl.cacertfile = /etc/rabbitmq/ssl/cacert.pem
  15. management.ssl.certfile = /etc/rabbitmq/ssl/cert.pem
  16. management.ssl.keyfile = /etc/rabbitmq/ssl/key.pem
  17. management.http_log_dir = /var/log/rabbitmq/http

我错过了什么?

lzfw57am

lzfw57am1#

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

  1. rabbitmq:
  2. image: rabbitmq:3.11.2-management-alpine
  3. hostname: rabbitmq
  4. environment:
  5. RABBITMQ_DEFAULT_USER: tester
  6. RABBITMQ_DEFAULT_PASS: qwerty
  7. RABBITMQ_MNESIA_DIR: /my-custom-data-folder-path-inside-container
  8. RABBITMQ_NODENAME: rabbitmq
  9. volumes:
  10. - type: bind
  11. source: /my-custom-data-folder-path-on-host
  12. target: /my-custom-data-folder-path-inside-container

我不是RabbitMQ的Maven,我的想法是让RabbitMQ将其数据库保存在主机上的/my-custom-data-folder-path-on-host文件夹中。就像您的情况一样,在第一次运行时,它能够成功启动,但在重新启动容器后,我得到了以下错误:
Boot FAILED启动过程中出现错误:{error,{schema_integrity_check_failed,[{table_missing,rabbit_listener}]}}我从文档中了解到,rabbit_listener是由RabbitMQ使用的Mnesia数据库中的一个表,而“listener”是在RabbitMQ中配置的TCP侦听器,用于接受客户端连接。要使RabbitMQ接受客户端连接,它需要绑定到一个或多个接口并侦听(特定于协议的)端口。在RabbitMQ的说法中,一个这样的接口/端口对称为侦听器。侦听器使用listeners.tcp.* 配置选项进行配置。
我想深入研究Mnesia数据库来排除故障,但没有Erlang知识就无法做到这一点。似乎由于某种原因,在第一次运行RabbitMQ时没有创建“rabbit_listener”表,但在后续运行时需要它。
最后,我设法通过更改初始配置来解决这个问题,如下所示:

  1. service-bus:
  2. image: rabbitmq:3.11.2-management-alpine
  3. hostname: rabbitmq
  4. environment:
  5. RABBITMQ_DEFAULT_USER: tester
  6. RABBITMQ_DEFAULT_PASS: qwerty
  7. RABBITMQ_NODENAME: rabbitmq
  8. volumes:
  9. - type: bind
  10. source: /my-custom-data-folder-path-on-host
  11. target: /var/lib/rabbitmq

我没有只覆盖RABBITMQ_MNESIA_DIR文件夹,而是覆盖了整个/var/lib/rabbitmq文件夹。这样就成功了,现在我的RabbitMQ成功地承受了重新启动。
根据您的配置,我认为如果您将./data:/var/lib/rabbitmq/mnesia/rabbit@rabbit替换为./data:/var/lib/rabbitmq,将解决此问题。

展开查看全部

相关问题