Docker RabbitMQ 持久性

问题描述 投票:0回答:2

docker 中的 RabbitMQ 在删除没有卷的容器后丢失数据。

我的 Dockerfile:

FROM rabbitmq:3-management
ENV RABBITMQ_HIPE_COMPILE 1
ENV RABBITMQ_ERLANG_COOKIE "123456"
ENV RABBITMQ_DEFAULT_VHOST "123456"

我的运行脚本:

IMAGE_NAME="service-rabbitmq"
TAG="${REGISTRY_ADDRESS}/${IMAGE_NAME}:${VERSION}"

echo $TAG

docker rm -f $IMAGE_NAME

  docker run \
    -itd \
    -v "rabbitmq_log:/var/log/rabbitmq" \
    -v "rabbitmq_data:/var/lib/rabbitmq" \
    --name "service-rabbitmq" \
    --dns=8.8.8.8 \
    -p 8080:15672 \
    $TAG

移除容器后,所有数据都会丢失。

如何在 docker 中配置具有持久数据的 RabbitMQ?

docker rabbitmq containers dockerfile
2个回答
46
投票

TL;博士

没有对此进行太多的挖掘,但似乎最简单的方法是更改 hostname,正如 Pedro 上面提到的那样。



更多信息:

使用

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 var 设置为
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

这会在我的撰写文件旁边创建一个 
data

目录,并保留 RabbitMQ 设置,如下所示:

./data/
  rabbit@mabbit/
  rabbit@mabbit-plugins-expand/
  [email protected]
  rabbit@mabbit-feature_flags



0
投票

解决方案是设置环境 RABBITMQ_NODENAME=rabbit@my-rabbit 并添加 my-rabbit=127.0.0.1 作为额外的主机文件条目

© www.soinside.com 2019 - 2024. All rights reserved.