如何向RabbitMQ Docker镜像添加插件?

58

我正在使用rabbitmq:3-management,但是它缺少我需要的插件rabbitmq_delayed_message_exchange

如果镜像中没有可用的插件,我该如何启用此插件?


2
你是否考虑过使用rabbimq:3-management作为基础,创建自己的Docker镜像并安装插件? - Urosh T.
@UroshT。谢谢!我以前从来没有做过这个,但我尝试着回答了一下。看起来好像可以用。我的自定义Docker镜像怎么样?我发现很奇怪的是我需要安装基本工具如curl和unzip。 - atkayla
我觉得很奇怪,为什么我需要安装像curl/unzip这样的基础组件 - 大多数镜像都不需要它们,为什么还要包含它们呢? - Sergio Tulentsev
@SergioTulentsev 好像要安装RabbitMQ插件,我需要使用curl进行下载,然后解压缩以获取.ez文件。 - atkayla
@kayla 但是它们不需要从基础镜像中运行rabbitmq,所以不奇怪它们不在那里。 - Sergio Tulentsev
是的,Sergio说得对,这些图像已经被优化,只包含部署rabbitmq所必需的内容。如果它起作用了,请接受您自己的答案,以便遇到相同问题的人知道如何解决它。 - Urosh T.
8个回答

44
FROM rabbitmq:3.7-management

RUN apt-get update && \
apt-get install -y curl unzip

RUN curl https://dl.bintray.com/rabbitmq/community-plugins/3.7.x/rabbitmq_delayed_message_exchange/rabbitmq_delayed_message_exchange-20171201-3.7.x.zip > rabbitmq_delayed_message_exchange-20171201-3.7.x.zip && \
unzip rabbitmq_delayed_message_exchange-20171201-3.7.x.zip && \
rm -f rabbitmq_delayed_message_exchange-20171201-3.7.x.zip && \
mv rabbitmq_delayed_message_exchange-20171201-3.7.x.ez plugins/

RUN rabbitmq-plugins enable rabbitmq_delayed_message_exchange

目前最新版本的链接可以在这里找到: https://dl.bintray.com/rabbitmq/community-plugins/3.8.x/rabbitmq_delayed_message_exchange/rabbitmq_delayed_message_exchange-20191008-3.8.x.zip - bastianwegge
我基于@atkayla的版本构建了一个不同的版本,只是为了从官方GitHub存储库中获取ez文件。请在此处查看: https://dev59.com/LFQJ5IYBdhLWcg3w66Y5#73615616 - Martin Larizzate

27

根据https://hub.docker.com/_/rabbitmq,似乎还有第二种选择没有被提及。

启用插件

[已接受的答案...]

您还可以将文件挂载到/etc/rabbitmq/enabled_plugins,其中包含以句点结尾的 erlang 原子列表。

例如,enabled_plugins 文件:

[rabbitmq_federation_management,rabbitmq_management,rabbitmq_mqtt,rabbitmq_stomp].
免责声明:我还没有尝试过。

这个确实应该标记为最有效的解决方案。 - Matthias Güntert
1
这应该是被接受的答案。谢谢! - dynamiclynk
11
我认为这个解决方案只适用于rabbitmq默认包含的插件。此问题中的插件不是列在这里的核心插件之一:https://www.rabbitmq.com/plugins.html。 - Dylan Kapoor

26

我来更新一下被接受的答案。你可以将下载的插件复制到rabbitmq镜像中并安装。

插件下载链接:https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases

1. 准备自定义镜像:

Dockerfile

  FROM rabbitmq:3.7.18-management
  COPY ./rabbitmq_delayed_message_exchange-20171201-3.7.x.ez /opt/rabbitmq/plugins/
  RUN rabbitmq-plugins enable rabbitmq_delayed_message_exchange

docker-compose.yml

rabbitmq:
  image: rabbitmq-custom
  ports:
    - "5672:5672"
    - "15672:15672"

2. 构建镜像

docker build -t rabbitmq-custom .

3. 运行 Docker Compose:

docker-compose up

12

这是我在3.9版本中的实现方法。

FROM rabbitmq:3.9-management

COPY rabbitmq.conf /etc/rabbitmq/rabbitmq.conf

RUN apt-get -o Acquire::Check-Date=false update && apt-get install -y curl

RUN curl -L https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases/download/3.9.0/rabbitmq_delayed_message_exchange-3.9.0.ez > $RABBITMQ_HOME/plugins/rabbitmq_delayed_message_exchange-3.9.0.ez

RUN chown rabbitmq:rabbitmq $RABBITMQ_HOME/plugins/rabbitmq_delayed_message_exchange-3.9.0.ez

RUN rabbitmq-plugins enable rabbitmq_delayed_message_exchange

9
希望这也能帮到您:
rabbitmq3:
  container_name: "rabbitmq"
  image: rabbitmq:3.8-management-alpine
  environment:
    - RABBITMQ_DEFAULT_USER=local
    - RABBITMQ_DEFAULT_PASS=localpwd
    - RABBITMQ_PLUGINS_DIR=/opt/rabbitmq/plugins:/usr/lib/rabbitmq/plugins
  ports:
    # AMQP protocol port
    - '5672:5672'
    # HTTP management UI
    - '15672:15672'
  volumes:
    - ./rabbit/enabled_plugins:/etc/rabbitmq/enabled_plugins
    - ./rabbit/plugins:/usr/lib/rabbitmq/plugins

在与docker-compose相同的路径下添加一个名为"rabbit"的文件夹,并在其中创建一个名为enabled_plugins的文件。
[rabbitmq_management, rabbitmq_message_deduplication].

然后将您需要的 .ez-VERSION 插件下载到 plugins 文件夹中(位于 "rabbit" 文件夹内)。

例如:https://github.com/noxdafox/rabbitmq-message-deduplication/releases


RABBITMQ_PLUGINS_DIR=/opt/rabbitmq/plugins:/usr/lib/rabbitmq/plugins 这个技巧帮助我启用了插件。 - Mustafa İlhan

4

如果您已经有一个正在运行的容器,那么只需运行以下命令:

docker exec -it NameOfContainer bash

在我的情况下,我需要启用 rabbitmq_jms_topic_exchange

rabbitmq-plugins enable rabbitmq_jms_topic_exchange


2

只需从官方位置获取插件,我建议使用下一个Dockerfile

FROM rabbitmq:3.10-management-alpine

RUN apk --no-cache add curl

RUN curl -L https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases/download/3.10.2/rabbitmq_delayed_message_exchange-3.10.2.ez > rabbitmq_delayed_message_exchange-3.10.2.ez && \
mv rabbitmq_delayed_message_exchange-3.10.2.ez plugins/

RUN rabbitmq-plugins enable rabbitmq_delayed_message_exchange

希望能对你有所帮助!


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接