【问题标题】:How to configure rabbitmq.config inside Docker containers?如何在 Docker 容器中配置 rabbitmq.config?
【发布时间】:2017-02-02 13:35:47
【问题描述】:

我使用的是官方的 RabbitMQ Docker 镜像 (https://hub.docker.com/_/rabbitmq/)

我尝试在运行后编辑容器内的rabbitmq.config文件

docker exec -it <container-id> /bin/bash

但是,这似乎对容器中运行的rabbitmq服务器没有影响。重启容器显然也没有帮助,因为 Docker 启动了一个全新的实例。

所以我假设为 Docker 容器配置 rabbitmq.config 的唯一方法是在容器开始运行之前设置它,我可以使用镜像支持的环境变量来部分完成。

不幸的是,并非所有配置选项都受环境变量支持。例如,我想在rabbitmq.config 中设置{auth_mechanisms, ['PLAIN', 'AMQPLAIN', 'EXTERNAL']}

然后我找到了RABBITMQ_CONFIG_FILE 环境变量,它应该允许我指向我想用作我的配置文件的文件。但是,我尝试了以下方法,但没有成功:

docker service create --name rabbitmq --network rabbitnet \
-e RABBITMQ_ERLANG_COOKIE='mycookie' --hostname = "{{Service.Name}}{{.Task.Slot}}" \
--mount type=bind,source=/root/mounted,destination=/root \
-e RABBITMQ_CONFIG_FILE=/root/rabbitmq.config rabbitmq

默认的rabbitmq.config 文件包含:

[ { rabbit, [ { loopback_users, [ ] } ] } ]

是容器启动后的内容

在 Docker 容器中配置 rabbitmq.config 的最佳方式是什么?

【问题讨论】:

    标签: docker rabbitmq docker-swarm-mode


    【解决方案1】:

    配置文件位于/etc/rabbitmq/rabbitmq.config,所以如果你用这样的东西挂载你自己的配置文件(我在这里使用 docker-compose 来设置图像)

    volumes:
    - ./conf/myrabbit.conf:/etc/rabbitmq/rabbitmq.config
    

    应该这样做

    【讨论】:

    • 我正在尝试使用COPY ./rabbitmq.config /etc/rabbitmq/rabbitmq.configCMD ["rabbitmq-server"] 将配置文件添加到我自己的图像中,但我添加的文件似乎被默认配置文件覆盖。可能是默认配置文件是由“rabbit-server”命令创建的
    • 是的,该文件刚刚被 Rabbit 覆盖,并且一些值(例如 default_permissions)被删除。非常烦人。
    • @KirillG。根据该图像的 docker-entrypoint.sh,发生这种情况是因为您提供了从 RABBITMQ_ 开始的环境变量。如果您最初将所有内容放在自己的配置中并且不从 env 提供任何内容,那么它不会覆盖。虽然这变得更加成问题,因为在配置中保存密码并发送到 git 看起来更糟。
    • 旧 erland conf -> - ./conf/myrabbit.conf:/etc/rabbitmq/rabbitmq.config 新版本 -> - ./conf/myrabbit.conf:/etc/rabbitmq/ rabbitmq.conf
    【解决方案2】:

    我可以使用以下 bash 脚本运行带有已安装配置的 RabbitMQ:

    #RabbitMQ props
    env=dev
    rabbitmq_name=dev_rabbitmq
    rabbitmq_port=5672
    
    #RabbitMQ container
    if [ "$(docker ps -aq -f name=${rabbitmq_name})" ]; then
        echo Cleanup the existed ${rabbitmq_name} container
        docker stop ${rabbitmq_name} && docker rm ${rabbitmq_name} 
        echo Create and start new ${rabbitmq_name} container
        docker run --name ${rabbitmq_name} -d -p ${rabbitmq_port}:15672 -v $PWD/rabbitmq/${env}/data:/var/lib/rabbitmq:rw -v $PWD/rabbitmq/${env}/definitions.json:/opt/definitions.json:ro -v $PWD/rabbitmq/${env}/rabbitmq.config:/etc/rabbitmq/rabbitmq.config:ro rabbitmq:3-management
    else
        echo Create and start new ${rabbitmq_name} container
        docker run --name ${rabbitmq_name} -d -p ${rabbitmq_port}:15672 -v $PWD/rabbitmq/${env}/data:/var/lib/rabbitmq:rw -v $PWD/rabbitmq/${env}/definitions.json:/opt/definitions.json:ro -v $PWD/rabbitmq/${env}/rabbitmq.config:/etc/rabbitmq/rabbitmq.config:ro rabbitmq:3-management    
    fi
    

    我的rabbitmq/dev 目录中还有以下config 文件

    definitions.json

    {
            "rabbit_version": "3.7.3",
            "users": [{
                "name": "welib",
                "password_hash": "su55YoHBYdenGuMVUvMERIyUAqJoBKeknxYsGcixXf/C4rMp",
                "hashing_algorithm": "rabbit_password_hashing_sha256",
                "tags": ""
            }, {
                "name": "admin",
                "password_hash": "x5RW/n1lq35QfY7jbJaUI+lgJsZp2Ioh6P8CGkPgW3sM2/86",
                "hashing_algorithm": "rabbit_password_hashing_sha256",
                "tags": "administrator"
            }],
            "vhosts": [{
                "name": "/"
            }, {
                "name": "dev"
            }],
            "permissions": [{
                "user": "welib",
                "vhost": "dev",
                "configure": ".*",
                "write": ".*",
                "read": ".*"
            }, {
                "user": "admin",
                "vhost": "/",
                "configure": ".*",
                "write": ".*",
                "read": ".*"
            }],
            "topic_permissions": [],
            "parameters": [],
            "global_parameters": [{
                "name": "cluster_name",
                "value": "rabbit@98c821300e49"
            }],
            "policies": [],
            "queues": [],
            "exchanges": [],
            "bindings": []
        }
    

    rabbitmq.config

    [
        {rabbit, [
            {loopback_users, []},
            {vm_memory_high_watermark, 0.7},
            {vm_memory_high_watermark_paging_ratio, 0.8},
            {log_levels, [{channel, warning}, {connection, warning}, {federation, warning}, {mirroring, info}]},
            {heartbeat, 10}
        ]},
        {rabbitmq_management, [
            {load_definitions, "/opt/definitions.json"}
        ]}
    ].
    

    【讨论】:

      猜你喜欢
      • 2018-01-11
      • 2016-05-31
      • 2018-05-29
      • 2021-07-03
      • 1970-01-01
      • 1970-01-01
      • 2020-07-29
      • 1970-01-01
      相关资源
      最近更新 更多