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

时间:2017-08-14 15:07:57

标签: docker rabbitmq

我创建了一个带有-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

为什么会发生这种情况?我做错了吗?

1 个答案:

答案 0 :(得分: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...