Estoy usando la imagen oficial de RabbitMQ Docker ( https://hub.docker.com/_/rabbitmq/ )
Intenté editar el archivo rabbitmq.config dentro del contenedor después de ejecutar
docker exec -it <container-id> /bin/bash
Sin embargo, esto parece no tener efecto en el servidor rabbitmq que se ejecuta en el contenedor. Obviamente, reiniciar el contenedor tampoco ayudó, ya que Docker inicia una instancia completamente nueva.
Así que asumí que la única forma de configurar rabbitmq.config para un contenedor Docker era configurarlo antes de que el contenedor comenzara a ejecutarse, lo que pude hacer en parte usando las variables de entorno compatibles con la imagen.
Desafortunadamente, no todas las opciones de configuración son compatibles con las variables de entorno. Por ejemplo, quiero configurar {auth_mechanisms, ['PLAIN', 'AMQPLAIN', 'EXTERNAL']} en rabbitmq.config .
Luego encontré la variable de entorno RABBITMQ_CONFIG_FILE , que debería permitirme señalar el archivo que quiero usar como mi archivo de configuración. Sin embargo, he intentado lo siguiente sin suerte:
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 El archivo predeterminado rabbitmq.config que contiene:
[ { rabbit, [ { loopback_users, [ ] } ] } ]es lo que hay en el contenedor una vez que comienza
¿Cuál es la mejor manera de configurar rabbitmq.config dentro de los contenedores de Docker?
el archivo de configuración vive en /etc/rabbitmq/rabbitmq.config , por lo que si monta su propio archivo de configuración con algo como esto (estoy usando docker-compose aquí para configurar la imagen)
volumes: - ./conf/myrabbit.conf:/etc/rabbitmq/rabbitmq.configDeberias hacer eso
Puedo ejecutar RabbitMQ con una configuración montada usando el siguiente script bash :
#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 También tengo los siguientes archivos de config en mi rabbitmq/dev
definiciones.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": [] }conejomq.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"} ]} ].