https://github.com/rabbitmq/rabbitmq-cli/pull/445

目前RABBITMQ_ERLANG_COOKIE环境变量已经被弃用,现在有两种方法设置erlang cookie

  • 在容器启动时直接覆盖$HOME/.erlang.cookie文件
  • 使用--erlang-cookie显式覆盖erlang cookie

直接覆盖$HOME/.erlang.cookie文件

在容器启动时直接挂载一个$HOME/.erlang.cookie文件到容器中去

  1. 创建一个自定义的erlang.cookie文件,注意修改文件的权限

    也可以用docker secret

1
2
3
4
5
# 自定义erlang.cookie文件内容
echo '123456' > erlang.cookie
# 修改文件所有者为容器内的rabbitmq用户,并且修改读写权限为0600
chmod 0400 erlang.cookie
chown 999:999 erlang.cookie
  1. 创建网桥和容器,并把文件挂载到容器内部去
1
2
3
4
5
6
7
# 创建网桥
docker network create --driver=bridge rabbitmq
# 创建容器
# $(pwd)/erlang.cookie代表上一步在当前目录创建的erlang.cookie文件
docker run -d --name=rabbitmq-1 --hostname=rabbitmq-1 -v $(pwd)/erlang.cookie:/var/lib/rabbitmq/.erlang.cookie:ro --network=rabbitmq rabbitmq:3.9.15-management
docker run -d --name=rabbitmq-2 --hostname=rabbitmq-2 -v $(pwd)/erlang.cookie:/var/lib/rabbitmq/.erlang.cookie:ro --network=rabbitmq rabbitmq:3.9.15-management
docker run -d --name=rabbitmq-3 --hostname=rabbitmq-3 -v $(pwd)/erlang.cookie:/var/lib/rabbitmq/.erlang.cookie:ro --network=rabbitmq rabbitmq:3.9.15-management
  1. 建立集群
1
2
3
# 把rabbitmq-2和rabbitmq-3加入集群
docker exec -it rabbitmq-2 /bin/bash -c "rabbitmqctl stop_app && rabbitmqctl join_cluster rabbit@rabbitmq-1 && rabbitmqctl start_app"
docker exec -it rabbitmq-3 /bin/bash -c "rabbitmqctl stop_app && rabbitmqctl join_cluster rabbit@rabbitmq-1 && rabbitmqctl start_app"
  1. 进入rabbitmq-1容器前端管理页面

使用--erlang-cookie显式覆盖erlang cookie(最方便)

需要用到RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS这个环境变量,假设想要设置的erlang cookie为123456

  1. 创建网桥和容器
1
2
3
4
5
6
# 创建网桥
docker network create --driver=bridge rabbitmq
# 创建容器
docker run -d --name=rabbitmq-1 --hostname=rabbitmq-1 -e RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="-setcookie 123456" --network=rabbitmq rabbitmq:3.9.15-management
docker run -d --name=rabbitmq-2 --hostname=rabbitmq-2 -e RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="-setcookie 123456" --network=rabbitmq rabbitmq:3.9.15-management
docker run -d --name=rabbitmq-3 --hostname=rabbitmq-3 -e RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="-setcookie 123456" --network=rabbitmq rabbitmq:3.9.15-management
  1. 建立集群
1
2
3
# 需要使用--erlang-cookie显式指定erlang cookie
docker exec -it rabbitmq-2 /bin/bash -c "rabbitmqctl stop_app --erlang-cookie '123456' && rabbitmqctl join_cluster rabbit@rabbitmq-1 --erlang-cookie '123456' && rabbitmqctl start_app --erlang-cookie '123456'"
docker exec -it rabbitmq-3 /bin/bash -c "rabbitmqctl stop_app --erlang-cookie '123456' && rabbitmqctl join_cluster rabbit@rabbitmq-1 --erlang-cookie '123456' && rabbitmqctl start_app --erlang-cookie '123456'"
  1. 进入rabbitmq-1容器前端管理页面