使用 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的主要内容,如果未能解决你的问题,请参考以下文章

Docker下安装RabbitMQ镜像

在centos搭建rabbitmq并制作docker镜像

使用docker 部署rabbitmq 镜像

docker 安装rabbitMQ

Docker 安装RabbitMQ

docker 安装rabbitMQ