rabbitmq docker 容器 .erlang.cookie 未从 RABBITMQ_ERLANG_COOKIE 环境变量设置

rabbitmq docker 容器 .erlang.cookie 未从 RABBITMQ_ERLANG_COOKIE 环境变量设置

我正在尝试使用 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。

相关内容