为什么我需要在创build卷时将主机名添加到docker中

我正在用-v选项创build一个rabbitmq容器来添加一个卷,奇怪的是,如果我不添加–hostname容器是没有得到卷的信息,例如:

我创build一个这样的卷:

docker volume create --name rabbit 

稍后我会validation卷是否已创build

 docker volume ls 

然后我创build这样的容器:

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

我进入本地主机:55555并input用户名和密码,然后创build一个简单的队列,我返回到我的机器并停止并删除容器:

 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 

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

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

为什么发生这种事?我做错了什么?

提前致谢。

所以你没有做错任何事情,但是你认为问题是和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... 

所以你可以看到它创build一个基于主机名的文件夹。 现在,如果我运行

 docker run -it --hostname mymq rabbitmq 

日志会显示

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

所以这就是这里发生的事情。 音量不是问题,而是rabbitmq的工作方式。 你可以使用像下面这样的环境variables来改变这个configuration的名字

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

现在显示日志

 Database directory at /var/lib/rabbitmq/mnesia/mq@localhost is empty. Initialising from scratch...