我正在创建一个带有 -v 选项的 rabbitmq 容器来添加一个卷,奇怪的是,如果我不添加 --hostname 容器将无法获取卷的信息,例如:
我创建了一个这样的卷:
docker volume create --name rabbit
Run Code Online (Sandbox Code Playgroud)
后来我验证该卷已创建
docker volume ls
Run Code Online (Sandbox Code Playgroud)
然后我像这样创建容器:
docker run --name rabbitprueba -P -p 55555:15672 -d -v rabbit:/var/lib/rabbitmq rabbitmq:3.6.10-management
Run Code Online (Sandbox Code Playgroud)
我输入 localhost:55555 并输入用户名和密码,然后创建一个简单的队列,返回我的机器并停止并移除容器:
docker stop rabbitprueba
docker rm rabbitprueba
Run Code Online (Sandbox Code Playgroud)
当我运行相同的命令时:
docker run --name rabbitprueba -P -p 55555:15672 -d -v rabbit:/var/lib/rabbitmq rabbitmq:3.6.10-management
Run Code Online (Sandbox Code Playgroud)
我创建的队列消失了,但如果我重复相同的步骤(停止容器并删除它)并将 --hostname 添加到命令中,队列不会被删除:
docker run --hostname rabbitprueba --name rabbitprueba -P -p 55555:15672 -d -v rabbit:/var/lib/rabbitmq rabbitmq:3.6.10-management
Run Code Online (Sandbox Code Playgroud)
为什么会这样?,我做错了什么吗?,
所以你没有做错任何事,但你假设问题出在 docker 上。问题是rabbitmq 如何保存它的数据。
当您使用以下命令启动rabbitmq 容器时
docker run -it rabbitmq:latest
Run Code Online (Sandbox Code Playgroud)
您会在 docker 日志中注意到一行显示
Database directory at /var/lib/rabbitmq/mnesia/rabbit@51267ba4cc9f is empty. Initialising from scratch...
Run Code Online (Sandbox Code Playgroud)
下一次运行:
Database directory at /var/lib/rabbitmq/mnesia/rabbit@5e9c67b4d6ed is empty. Initialising from scratch...
Run Code Online (Sandbox Code Playgroud)
所以你可以看到它根据主机名创建了一个文件夹。现在如果我跑
docker run -it --hostname mymq rabbitmq
Run Code Online (Sandbox Code Playgroud)
日志会显示
Database directory at /var/lib/rabbitmq/mnesia/rabbit@mymq is empty. Initialising from scratch...
Run Code Online (Sandbox Code Playgroud)
这就是这里发生的事情。不是音量问题,而是rabbitmq 的工作方式。您可以使用如下环境变量更改此配置的名称
docker run -it -e "RABBITMQ_NODENAME=mq@localhost" rabbitmq
Run Code Online (Sandbox Code Playgroud)
日志现在会显示
Database directory at /var/lib/rabbitmq/mnesia/mq@localhost is empty. Initialising from scratch...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
657 次 |
最近记录: |