我想启动三个 RabbitMQ 容器,它们将连接到一个集群中。我想保持简单,而不是定义具有特定卷的复杂 Dockerfile。 这就是我现在正在做的事情:
docker network create rabbits
docker run -d --rm --net rabbits --hostname rabbit-1 --name rabbit-1 -p 8081:15672 -e RABBITMQ_ERLANG_COOKIE=ASDF rabbitmq:3.8-management
docker run -d --rm --net rabbits --hostname rabbit-2 --name rabbit-2 -p 8082:15672 -e RABBITMQ_ERLANG_COOKIE=ASDF rabbitmq:3.8-management
docker run -d --rm --net rabbits --hostname rabbit-3 --name rabbit-3 -p 8083:15672 -e RABBITMQ_ERLANG_COOKIE=ASDF rabbitmq:3.8-management
当我尝试使用以下命令告诉节点相互加入时,我收到一条错误消息:
docker exec -it rabbit-2 rabbitmqctl stop_app
docker exec -it rabbit-2 rabbitmqctl reset
docker exec -it rabbit-2 rabbitmqctl join_cluster rabbit@rabbit-1
docker exec -it rabbit-2 rabbitmqctl start_app
docker exec -it rabbit-2 rabbitmqctl cluster_status
这会导致:
RABBITMQ_ERLANG_COOKIE env variable support is deprecated and will be REMOVED in a future version. Use the $HOME/.erlang.cookie file or the --erlang-cookie switch instead.
但是我不知道如何通过这个开关。当我将其添加到 docker run 命令时,它不起作用。所以我想也许可以在 join_cluster 命令之后添加这个,但是 cookie 已经设置好了。
我需要如何更改 docker run 命令?
为了回答您和其他有关
RABBITMQ_ERLANG_COOKIE
的问题,我打开了这个问题:
https://github.com/rabbitmq/rabbitmq-server/issues/7262
当前您应该使用环境变量并忽略警告。
最佳实践是使用 docker compose 和基于官方 RabbitMQ 镜像的您自己的镜像:
https://github.com/lukebakken/docker-rabbitmq-cluster/blob/main/docker-compose.yml
https://github.com/lukebakken/docker-rabbitmq-cluster/blob/main/rmq/Dockerfile
从版本 3.7.0 开始,RabbitMQ 中不再使用 RABBITMQ_ERLANG_COOKIE 环境变量。相反,您可以通过使用 docker run 命令中的 -e 选项并将 RABBITMQ_ERLANG_COOKIE 环境变量设置为所需的值来设置 Erlang cookie 值。这是一个例子:
docker run -d --namerabbitmq -e RABBITMQ_ERLANG_COOKIE='your_cookie_value'rabbitmq:3
或者,您可以将 Erlang cookie 存储在文件中,并将其作为卷安装到容器中。例如:
echo 'your_cookie_value' > erlang.cookie
docker run -d --namerabbitmq -v $(pwd)/erlang.cookie:/var/lib/rabbitmq/.erlang.cookierabbitmq:3