Docker RabbitMQ持久性

Rin*_*iev 11 containers rabbitmq docker dockerfile

删除没有卷的容器后,docker los数据在docker los数据中

我的Dockerfile:

FROM rabbitmq:3-management
ENV RABBITMQ_HIPE_COMPILE 1
ENV RABBITMQ_ERLANG_COOKIE "123456"
ENV RABBITMQ_DEFAULT_VHOST "123456"
Run Code Online (Sandbox Code Playgroud)

我的运行脚本:

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
Run Code Online (Sandbox Code Playgroud)

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

如何在Docker中使用持久性数据配置Rabbitmq?

小智 14

Rabbitmq使用主机名作为mnesia目录中文件夹名称的一部分。也许--hostname some-rabbit在您的docker run中添加一个?

我有同样的问题,我在这里找到了答案

  • 您也可以将RABBITMQ_NODENAME环境变量设置为类似于node @ rabbitmq的名称,而不用更改主机名。 (5认同)
  • 是的。为了澄清 mnesia 文件夹,我们可以调用 `docker log $YOUR_CONTAINER_NAME` 来查看 `database dir : /var/lib/rabbitmq/mnesia/rabbit@$YOUR_HOST_NAME` ref 行。https://hub.docker.com/_/rabbitmq/ (3认同)

wil*_*mab 5

TL; DR

对此并没有做太多的挖掘,但是似乎最简单的方法是更改hostname上面Pedro提到的方法。

更多信息:

使用 RABBITMQ_NODENAME

如果您想RABBITMQ_NODENAME通过Docker 编辑变量,hostname由于Docker主机名是作为随机散列生成的,因此您似乎也需要添加一个。

如果将RABBITMQ_NODENAMEvar 更改为静态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主机名是在启动时随机生成的(如果未明确分配)。实际上,要确保您使用EXACT SAME <docker_hostname_hash>作为原始运行时的障碍,以便正确拾取数据目录。动态/稳健地实施将是一个痛苦。如下所述,使用显式主机名将是最简单的。


另一种方法是将设置为hostname您选择的值-例如,app-messaging- 并且还将RABBITMQ_NODENAMEvar 设置为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
Run Code Online (Sandbox Code Playgroud)

这将data在我的撰写文件旁边创建一个目录,并保留RabbitMQ设置,如下所示:

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
Run Code Online (Sandbox Code Playgroud)