简介
虽然没有进行过深入的调查,但似乎最简单的方法是像 Pedro 在上面提到的那样更改 hostname
。
更多信息:
使用 RABBITMQ_NODENAME
如果你想通过 Docker 编辑 RABBITMQ_NODENAME
变量,似乎你需要添加一个 hostname
,因为 Docker 主机名会生成为随机哈希值。
如果将 RABBITMQ_NODENAME
变量更改为类似于 my-rabbit
这样的静态变量,则 RabbitMQ 会抛出类似于“nxdomain not found
”的错误,因为它正在寻找类似于
my-rabbit@<docker_hostname_hash>
。如果你知道 Docker 主机名并可以自动将其拉入到像这样的 RABBITMQ_NODENAME
值中,my-rabbit@<docker_hostname_hash>
,我相信它会起作用。
更新
我之前说过,
如果你知道 Docker 主机名并可以自动将其拉入到像这样的 RABBITMQ_NODENAME
值中,my-rabbit@<docker_hostname_hash>
,我相信它会起作用。
按照描述,这不会起作用,因为默认的 Docker 主机名是在启动时随机生成的,如果没有显式指定,则会生成随机哈希值。实际上,障碍将确保您使用与最初运行的完全相同的<docker_hostname_hash>
,以便正确拾取数据目录。这将很难动态/稳健地实现。最简单的方法是像下面描述的那样使用显式主机名。
另一种选择是将 hostname
设置为你选择的值 - 比如说,app-messaging
- 并且 将 RABBITMQ_NODENAME
变量设置为类似于 rabbit@app-messaging
的值。这样你可以控制将在数据目录中使用的完整节点名称。
使用主机名
(推荐)
尽管如此,除非你有理由不更改主机名,否则只更改主机名是确保每次挂载和卸载数据到相同位置的最简单方法。
我正在使用以下 Docker Compose 文件成功地保持我的设置在多次启动时。
version: '3'
services:
rabbitmq:
hostname: 'mabbit'
image: "${ARTIFACTORY}/rabbitmq:3-management"
ports:
- "15672:15672"
- "5672:5672"
volumes:
- "./data:/var/lib/rabbitmq/mnesia/"
networks:
- rabbitmq
networks:
rabbitmq:
driver: bridge
这将在我的compose文件旁边创建一个data
目录,并像下面这样持久化RabbitMQ设置:
./data/
rabbit@mabbit/
rabbit@mabbit-plugins-expand/
rabbit@mabbit.pid
rabbit@mabbit-feature_flags