我的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?
答案 0 :(得分:10)
Rabbitmq使用主机名作为mnesia中文件夹名称的一部分 目录。也许在您的泊坞窗运行中添加
--hostname some-rabbit
?
我遇到了同样的问题,我找到了答案here
答案 1 :(得分:6)
对此没有做太多的研究,但是似乎最简单的方法是更改Pedro上面提到的hostname
。
RABBITMQ_NODENAME
如果您想通过Docker编辑RABBITMQ_NODENAME
变量,由于Docker主机名是作为随机散列生成的,因此您似乎还需要添加hostname
。
如果将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主机名是在启动时随机生成的(如果未明确分配)。实际上,要确保您使用EXACT SAME <docker_hostname_hash>
作为原始运行时的障碍,以便正确获取数据目录。动态/稳健地实施将是一个痛苦。如下所述,使用显式主机名是最简单的。
另一种选择是将hostname
设置为您选择的值,例如app-messaging
– 并且还将RABBITMQ_NODENAME
var设置为某种值像rabbit@app-messaging
。这样,您可以控制将在数据目录中使用的完整节点名称。
(推荐)
这就是说,除非您有理由不更改主机名,否则仅更改主机名是确保每次都将数据装入同一位置和从同一位置装入数据的最简单方法。 / p>
我正在使用以下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/
rabbit@mabbit.pid
rabbit@mabbit-feature_flags