为什么我需要在创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...