我正在尝试使用 aws 容器服务设置一个 rabbitmq 集群。我需要/var/lib/rabbitmq/.erlang.cookie
在所有节点上都相同。因此,对于我的所有 rabbitmq 容器,在运行时我都会传入一个RABBITMQ_ERLANG_COOKIE
环境变量,根据此处的文档https://hub.docker.com/_/rabbitmq/应写入/var/lib/rabbitmq/.erlang.cookie
。
当我检查正在运行的容器时,我可以看到环境变量RABBITMQ_ERLANG_COOKIE=QOKWQHQKXXTBIEAOPWKE
存在,但是我cat /var/lib/rabbitmq/.erlang.cookie
得到的是不同的值AYMNAPKRPCPJVPFYAJZX
。
因此,所有 rabbitmq 容器都有不同.erlang.cookie
并且无法形成集群。
为什么没有设置环境变量中的 cookie?我可能遗漏了什么?
我正在使用 rabbitmq:3.6.9-alpine 图像。
答案1
我在搜索非常相似的问题时遇到了这个线程,但是我的环境变量是 ERLANG_COOKIE,在我改为使用 RABBITMQ_ERLANG_COOKIE 之后,它运行得很好
下面是关于 rabbitmq 的 docker-compose,${HOST} 将被替换为 .env 文件中设置的值,该文件与 docker-compose.yml 位于同一文件夹中
rabbitmq:
image: rabbitmq:3-management
ports:
- "15672:15672"
- "25672:25672"
- "5672:5672"
- "4369:4369"
environment:
- RABBITMQ_ERLANG_COOKIE='takeMyCookies'
hostname: "${HOST}"
查看 cookie 值
root@prod-03:/# cat ~/.erlang.cookie
'takeMyCookies'
root@prod-03:/# cat /var/lib/rabbitmq/.erlang.cookie
'takeMyCookies'
答案2
我遇到了同样的错误,直到我正确配置了 cookie 值并从中删除了“-”字符。
另一种设置方法是RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="-setcookie cookie-value"
答案3
RabbitMQ docker 镜像 3.9 版中存在一个错误,其中 RABBITMQ_ERLANG_COOKIE 值未写入容器中的 /var/lib/rabbitmq/.erlang.cookie 文件。错误在此处标识 ->https://github.com/docker-library/rabbitmq/pull/502。
一种解决方案是使用其他版本的 RabbitMQ docker 镜像,例如 3.8 版本。
docker pull rabbitmq:3.8-management
或者,如果您必须使用 3.9 版本,那么您可以在 Docker 系统上创建 .erlang.cookie 文件,并使用 -v 或 --volume 选项将 Docker 系统上的 .erlang.cookie 文件挂载到容器中的 /var/lib/rabbitmq/.erlang.cookie。
docker run --detach --volume /path/to/.erlang.cookie:/var/lib/rabbitmq/.erlang.cookie rabbitmq:management
答案4
如果使用docker volume hack,不要忘记将erlang.cookie chmod 为600。