我创建了一个带有-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
为什么会发生这种情况?我做错了吗?
答案 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...