首先,这似乎与此处发布的问题类似:Dropping container with RabbitMQ in Docker
但是,几天后该线程似乎不活跃,我很想对唯一提供的答案提出问题,但我的声誉不够高,无法这样做。我还想尝试提供更多细节。基本上,我有一个公共托管的服务器,我最近尝试将一些更改推送到其中,但 gitlab 部署失败。就后端而言,更改非常小(实际上只是添加了一个变量),当我尝试撤消更改时,我从 docker 收到了相同的错误:
error: RABBITMQ_DEFAULT_PASS is set but deprecated
error: RABBITMQ_DEFAULT_USER is set but deprecated
error: RABBITMQ_ERLANG_COOKIE is set but deprecated
error: deprecated environment variables detected
我永远无法在本地重现这个。似乎在重新启动或重新编译后,RabbitMQ 已开始在服务器上出现这些错误。我不熟悉 RabbitMQ,但我的猜测是他们最近将其从警告切换为错误,从而导致我的服务器在重新部署时崩溃。我的 docker-compose.yml 的兔子部分:
rabbitmq:
image: rabbitmq:3-management
environment:
RABBITMQ_ERLANG_COOKIE: secret
RABBITMQ_DEFAULT_USER: [REDACTED]
RABBITMQ_DEFAULT_PASS: [REDACTED]
networks:
- backend
ports:
- 15672:15672
- 5672:5672
对其他线程的响应建议改用这些变量:
DEFAULT_VHOST=/
DEFAULT_USER=
DEFAULT_PASS=
并提供了此链接:https://www.rabbitmq.com/configure.html
但是这个答案意味着您只需将已弃用的变量替换为他在 docker compose 中列出的变量即可。他的链接没有对此进行澄清,而是提供了一种不同的解决方案,即使用rabbitmq.conf 文件。此外,使用它们代替 docker compose 中的旧变量会导致本地登录错误:
rabbitmq_1 | PLAIN 登录被拒绝:用户 '' 尝试使用空白密码登录, 这是内部 authN 后端禁止的。要使用基于 TLS/x509 证书的身份验证,请参阅rabbitmq_auth_mechanism_ssl 插件并将客户端配置为使用 EXTERNAL 身份验证机制。或者将用户密码更改为非空。
他从哪里得出这个答案,真的像交换到一组未弃用的变量那么简单吗?
如果docker需要一个rabbitmq.conf来编译,我该把文件放在哪里?我本地没有,网站提到了 /etc/rabbitmq/rabbitmq.conf,但似乎只有在不在 docker 中运行时才会出现这种情况。我本地也没有这个文件,docker 运行良好。
RABBITMQ_ERLANG_COOKIE 怎么样?该网站似乎没有显示替代方案,响应者也没有。
还有单独使用 docker-compose 运行兔子 docker 的方法吗?或者甚至是一种方法来强制允许同时使用已弃用的变量,以便我的服务器再次运行?
我想提供更多信息,但我不确定在不冒分享敏感信息风险的情况下还可以分享什么。请让我知道还有哪些其他有用的信息
我找到了解决方案。 Rabbitmq 3.9 版本确实已弃用这些变量,并且
image: rabbitmq:3-management
行导致它获取 3.9 版本。我将线路更改为image: rabbitmq:3.8-management
,效果非常好。
您应该使用以下环境变量:
DEFAULT_VHOST=/
DEFAULT_USER=user1
DEFAULT_PASS=pass1
请参阅 https://www.rabbitmq.com/configure.html 了解更多信息。
或者使用其他版本的rabbitMQ,如3.8:
rabbitmq:3.8-management
更改版本即可实现,非常感谢