将代理定义导入 Dockerized RabbitMQ

Dum*_*tru 11 rabbitmq docker

我有一个 RabbitMQ 代理,其中已经定义了一些交换和队列。我知道我可以通过 HTTP API 导出和导入这些定义。我想对其进行 Docker 化,并在启动时导入所有代理定义。

理想情况下,这将像通过 API 一样轻松完成。我可以编写一堆rabbitmqctl命令,但是如果有很多定义,这可能需要相当长的时间。此外,其他人通过网络界面所做的每项更改都必须插入。

我已经成功地通过编写一个脚本来休眠curl请求并启动服务器来完成我想要的事情,但这似乎很容易出错并且确实不优雅。有没有更好的方法来进行定义导入/导出,或者这是最好的方法?

我的 Dockerfile:

FROM rabbitmq:management
LABEL description="Rabbit image" version="0.0.1"
ADD init.sh /init.sh          
ADD rabbit_e6f2965776b0_2015-7-14.json /rabbit_config.json         
CMD ["/init.sh"]
Run Code Online (Sandbox Code Playgroud)

初始化程序

sleep 10 && curl -i -u guest:guest -d @/rabbit_config.json -H "content-type:application/json" http://localhost:15672/api/definitions -X POST &

rabbitmq-server $@
Run Code Online (Sandbox Code Playgroud)

and*_*rey 11

  1. 使用 导出定义rabbitmqadmin export rabbit.definitions.json

  2. 使用 Dockerfile 将它们添加到图像中:ADD rabbit.definitions.json /tmp/rabbit.definitions.json

  3. 启动容器时添加环境变量,例如使用docker-compose.yml:

     environment:
       - RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS=-rabbitmq_management load_definitions "/tmp/rabbit.definitions.json"
    
    Run Code Online (Sandbox Code Playgroud)


Tor*_*san 0

您可以使用 RabbitMQ 启动容器,配置资源(队列、交换、绑定),然后将配置的容器作为新映像提交。该镜像可用于启动新容器。

更多详细信息请访问https://docs.docker.com/articles/basics/#committing- saving -a-container-state