使用 rabbitmq docker 镜像在 rabbitmq.config 中配置 ssl
Posted
技术标签:
【中文标题】使用 rabbitmq docker 镜像在 rabbitmq.config 中配置 ssl【英文标题】:Configuring ssl in rabbitmq.config using rabbitmq docker image 【发布时间】:2018-01-11 02:50:50 【问题描述】:我的目标是设置 rabbitmq 支持 ssl,这是以前使用下面的 rabbitmq.config
文件实现的,该文件位于主机的 /etc/rabbitmq
路径中。
现在我希望能够配置其他 rabbitmq 用户和密码而不是默认值 guest
guest
。
我正在使用具有以下 docker-compose 配置的 rabbitmq docker 映像:
version: '2'
services:
rabbitmq:
build: ./rabbitmq
ports:
- "8181:8181"
expose:
- "15672"
- "8181"
volumes:
- /etc/rabbitmq:/etc/rabbitmq
environment:
RABBITMQ_DEFAULT_USER: user123
RABBITMQ_DEFAULT_PASS: 1234
Rabbitmq 配置:
[rabbit,
[
loopback_users, [],
heartbeat,0,
ssl_listeners, [8181],
ssl_options, [cacertfile, "/etc/rabbitmq/ca/cacert.pem",
certfile, "/etc/rabbitmq/server/cert.pem",
keyfile, "/etc/rabbitmq/server/key.pem",
verify,verify_none,
fail_if_no_peer_cert,false]
]
].
Rabbitmq dockerfile:
from rabbitmq:management
#and some certificate generating logic
我注意到,一旦添加了environment
部分,当前的rabbitmq.config
文件就会被docker-entrypoint.sh file 自动生成的配置覆盖。
为了使用证书构建配置,我找到了可以执行此操作的环境变量(查看 here)。
但是没有找到任何参考来定义 ssl_listeners
部分及其端口,如下所示 rabbitmq.config
我的问题是:如何使用 env 变量创建如下所述的确切配置 OR 我怎样才能保留我的 rabbitmq.config
使用新用户定义 rabbitmq 和以某种动态方式输入密码(可能是配置文件的模板)?
【问题讨论】:
【参考方案1】:试试这个
version: '2'
services:
rabbitmq:
build: ./rabbitmq
ports:
- "8181:8181"
expose:
- "15672"
- "8181"
volumes:
- /etc/rabbitmq:/etc/rabbitmq
command: rabbitmq-server
entrypoint: ""
environment:
RABBITMQ_DEFAULT_USER: user123
RABBITMQ_DEFAULT_PASS: 1234
这将覆盖docker-entrpoint
并运行rabbitmq 服务器。现在./docker-entrypoint.sh
也设置了某些环境变量。您的情况可能需要哪个。因此,请确保您拥有所需的一切
【讨论】:
这个解决方案的输出相当于根本不写环境部分,因为docker入口点正在使用这些来添加不同于guest默认用户的用户。 然后下一个选项是复制 docker-entrypoint.sh 并根据您的需要对其进行自定义,然后使用 docker-compose 中的卷映射共享它以在加载图像时覆盖文件。如果你愿意,你可以选择这种方法 如果您提供上述链接中提到的环境变量,并且没有覆盖入口点而不是rabbitmq.config
正在根据环境部分重新创建。
好的,我明白了,你能提供一个例子吗?顺便说一句,使用模板配置文件并用环境变量值填充它怎么样,你能想到我们该怎么做吗?以上是关于使用 rabbitmq docker 镜像在 rabbitmq.config 中配置 ssl的主要内容,如果未能解决你的问题,请参考以下文章