Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Docker容器中配置rabbitmq.config?_Docker_Rabbitmq_Docker Swarm Mode - Fatal编程技术网

如何在Docker容器中配置rabbitmq.config?

如何在Docker容器中配置rabbitmq.config?,docker,rabbitmq,docker-swarm-mode,Docker,Rabbitmq,Docker Swarm Mode,我正在使用正式的RabbitMQ Docker映像() 我尝试在运行后编辑容器中的rabbitmq.config文件 docker exec-it/bin/bash 但是,这似乎对容器中运行的rabbitmq服务器没有影响。重新启动容器显然也没有帮助,因为Docker启动了一个全新的实例 因此,我假设为Docker容器配置rabbitmq.config的唯一方法是在容器开始运行之前对其进行设置,我可以部分地使用映像支持的环境变量进行设置 不幸的是,环境变量并不支持所有配置选项。例如,我想在rab

我正在使用正式的RabbitMQ Docker映像()

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

docker exec-it/bin/bash

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

因此,我假设为Docker容器配置
rabbitmq.config
的唯一方法是在容器开始运行之前对其进行设置,我可以部分地使用映像支持的环境变量进行设置

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

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

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
的最佳方法是什么?

配置文件位于
/etc/rabbitmq/rabbitmq.config
中,因此如果您使用类似的方式装载自己的配置文件(我在这里使用Docker compose来设置映像)


这应该可以做到

我可以使用下面的
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
dir中还有以下
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"}
    ]}
].

我试图使用
COPY./rabbitmq.config/etc/rabbitmq/rabbitmq.config
将配置文件添加到自己的映像中,然后使用
CMD[“rabbitmq服务器”]
添加,但我添加的文件似乎被默认配置文件覆盖。可能是默认配置文件是由“rabbit server”命令创建的是的,该文件只是被rabbit覆盖了,一些值(如默认的_权限)被删除了。非常恼人。@KirillG。根据该映像的docker-entrypoint.sh,之所以会发生这种情况,是因为您提供了从RABBITMQ_3;开始的环境变量。如果您最初将所有内容都放在自己的配置中,并且不从env提供任何内容,那么它不会覆盖。虽然这会变得更麻烦,因为在配置中保存密码并发送到git看起来更糟。
[
    {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"}
    ]}
].