lem*_*mon 1 ubuntu rabbitmq docker docker-compose
我正在尝试通过 docker-compose 命令设置rabbitmq 实例。
我的 docker 撰写 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
Run Code Online (Sandbox Code Playgroud)
当我第一次运行 docker compose up 时,一切正常。但是当我添加队列并交换(从定义.json 加载)、关闭并删除容器并尝试再次 docker compose up 时,出现此错误
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>
Run Code Online (Sandbox Code Playgroud)
这是我的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
Run Code Online (Sandbox Code Playgroud)
我缺少什么?
./data:/var/lib/rabbitmq/mnesia/rabbit@rabbit尝试在您的配置中替换为./data:/var/lib/rabbitmq.
我遇到了同样的错误,并花了相当多的时间试图找出问题所在。我的配置与你的略有不同,如下所示:
兔子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
volumes:
- type: bind
source: /my-custom-data-folder-path-on-host
target: /my-custom-data-folder-path-inside-container
I'm not an expert in RabbitMQ, and my idea was just to make RabbitMQ to persist it's database in the /my-custom-data-folder-path-on-host folder on host. And just like in your case on the first run it was able to start successfully, but after container restart I was getting the following error:
BOOT FAILED Error during startup: {error, {schema_integrity_check_failed, [{table_missing,rabbit_listener}]}}I learned from the documentation is that
rabbit_listener is a table inside the Mnesia database that is used by RabbitMQ and that "listeners" are the TCP-listeners that are configured in RabbitMQ to accept client connections.
为了让 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 成功地承受了重新启动。
| 归档时间: |
|
| 查看次数: |
3924 次 |
| 最近记录: |