我正在创建一个带有-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如何保存其数据。
使用以下命令启动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...