为什么我需要在创建卷时向docker添加主机名

问题描述 投票:1回答:1

我正在创建一个带有-v选项的rabbitmq容器来添加一个卷,奇怪的是,如果我不添加--hostname,则容器无法获取卷的信息,例如:

我创建了一个这样的卷:

docker volume create --name rabbit

后来我验证了卷的创建

docker volume ls

然后我像这样创建容器:

docker run --name rabbitprueba -P -p 55555:15672 -d -v rabbit:/var/lib/rabbitmq rabbitmq:3.6.10-management

我输入localhost:55555并输入用户名和密码,然后我创建一个简单的队列,我返回我的机器并停止并删除容器:

docker stop rabbitprueba
docker rm rabbitprueba

当我运行相同的命令时:

docker run --name rabbitprueba -P -p 55555:15672 -d -v rabbit:/var/lib/rabbitmq rabbitmq:3.6.10-management

我创建的队列已经消失,但如果我重复相同的步骤(停止容器并将其删除)并添加到命令--hostname,则不会删除队列:

docker run --hostname rabbitprueba --name rabbitprueba -P -p 55555:15672 -d -v rabbit:/var/lib/rabbitmq rabbitmq:3.6.10-management

为什么会这样?我做错了吗?

docker rabbitmq
1个回答
4
投票

所以你没有做错任何事,但是你假设问题与docker有关。问题是rabbitmq如何保存其数据。

使用以下命令启动rabbitmq容器时

docker run -it rabbitmq:latest

你会在docker日志中注意到一条线

Database directory at /var/lib/rabbitmq/mnesia/rabbit@51267ba4cc9f is empty. Initialising from scratch...

下次运行:

Database directory at /var/lib/rabbitmq/mnesia/rabbit@5e9c67b4d6ed is empty. Initialising from scratch...

所以你可以看到它根据主机名创建一个文件夹。现在,如果我跑

docker run -it --hostname mymq rabbitmq

日志会显示出来

Database directory at /var/lib/rabbitmq/mnesia/rabbit@mymq is empty. Initialising from scratch...

这就是这里发生的事情。卷不是问题,但只是rabbitmq的工作方式。您可以使用下面的环境变量更改此配置的名称

 docker run -it -e "RABBITMQ_NODENAME=mq@localhost" rabbitmq

现在会显示日志

Database directory at /var/lib/rabbitmq/mnesia/mq@localhost is empty. Initialising from scratch...
© www.soinside.com 2019 - 2024. All rights reserved.