RabbitMQ is one of the most widely used open-source message brokers, facilitating communication between distributed systems. It implements the Advanced Message Queuing Protocol (AMQP), making it a popular choice for enterprise messaging. Running RabbitMQ inside Docker containers simplifies deployment, scalability, and maintenance. Additionally, using a WebUI to monitor RabbitMQ provides real-time insights into queues, connections, and message throughput.
This guide will explore setting up RabbitMQ on Docker, configuring persistent storage, enabling the management plugin for WebUI monitoring, and performing basic administration tasks.
Prerequisites
Before getting started, ensure you have the following installed on your system:
- Docker: Developers can install Docker from here.

To verify if Docker and Docker Compose are installed, run the following:
docker --version docker-compose --version
Step 1: Running RabbitMQ with Docker
Pull the RabbitMQ Docker Image
To get started, pull the official RabbitMQ Docker image with the management plugin enabled:
docker pull rabbitmq:3-management
This image comes pre-installed with the RabbitMQ Management Plugin, allowing you to monitor and manage RabbitMQ via a web interface.
Running RabbitMQ Container
Now, start a RabbitMQ container with the following command:
docker run -d --name rabbitmq \ -p 5672:5672 -p 15672:15672 \ -e RABBITMQ_DEFAULT_USER=admin \ -e RABBITMQ_DEFAULT_PASS=admin \ rabbitmq:3-management
-d
It runs the container in detached mode.--name rabbitmq
Assign a custom name to the container.-p 5672:5672
Maps the RabbitMQ messaging port.-p 15672:15672
Maps the RabbitMQ WebUI (Management Plugin).-e RABBITMQ_DEFAULT_USER=admin
Sets the default username.-e RABBITMQ_DEFAULT_PASS=admin
Sets the default password.
After executing this command, RabbitMQ should be up and running. You can verify the running container by using:
docker ps
Step 2: Access RabbitMQ WebUI
RabbitMQ provides a user-friendly web-based management console for monitoring queues, exchanges, bindings, and messages.
To access the RabbitMQ Management UI, open a web browser and navigate to:
http://localhost:15672
Log in using the credentials set earlier (admin/admin
).
Step 3: Running RabbitMQ with Docker-Compose
Instead of running RabbitMQ manually with docker run
, we can use docker-compose
to define and manage our RabbitMQ container.
Create a docker-compose.yml
File
Create a new directory for your RabbitMQ setup:
mkdir rabbitmq-docker cd rabbitmq-docker
Now, create a docker-compose.yml
The file inside this directory:
services: rabbitmq: image: "rabbitmq:4.0.6-management" container_name: "rabbitmq" ports: - "5672:5672" - "15672:15672" environment: RABBITMQ_DEFAULT_USER: admin RABBITMQ_DEFAULT_PASS: admin volumes: - rabbitmq_data:/var/lib/rabbitmq volumes: rabbitmq_data:
services.rabbitmq.image
: Uses the RabbitMQ image with the management plugin.container_name
: Assign a custom name to the container.ports
: Maps the necessary ports.environment
: Defines environment variables for default user credentials.volumes
: Creates a named volume to persist data.
Start RabbitMQ with Docker Compose
Run the following command to start RabbitMQ:
docker-compose up -d
This will:
- Pull the RabbitMQ image (if not already pulled).
- Create and start the container.
- Persist data using a named volume (
rabbitmq_data
).
You can check the status of the container with:
docker-compose ps
Step 4: Configuring RabbitMQ
Once RabbitMQ runs, you can create virtual hosts, queues, and users. Here are some useful commands or WebUI:
Listing Virtual Hosts

docker exec -it rabbitmq rabbitmqctl list_vhosts
Creating a Virtual Host

docker exec -it rabbitmq rabbitmqctl add_vhost /my_vhost
Creating a New User

docker exec -it rabbitmq rabbitmqctl add_user myuser mypassword
Setting User Permissions

docker exec -it rabbitmq rabbitmqctl set_permissions -p /my_vhost myuser ".*" ".*" ".*"
Enabling RabbitMQ Plugins
docker exec -it rabbitmq rabbitmq-plugins enable rabbitmq_management
Step 5: Monitoring RabbitMQ with WebUI
With RabbitMQ running, visit:
http://localhost:15672
Use the login credentials (admin/admin
) to access the dashboard.





To stop RabbitMQ running with Docker Compose:
docker-compose down
To remove RabbitMQ and all associated data:
docker-compose down -v
For a standalone Docker container, stop and remove it using:
docker stop rabbitmq docker rm rabbitmq
To remove the RabbitMQ image:
docker rmi rabbitmq:3-management
RabbitMQ cluster on Docker
1. Create docker-compose.yml
This file defines a RabbitMQ cluster with multiple nodes.
services: rabbitmq-node-1: image: rabbitmq:4.0.6-management container_name: rabbitmq-node-1 hostname: rabbitmq-node-1 environment: RABBITMQ_ERLANG_COOKIE: "rabbitmq-cluster-cookie" RABBITMQ_DEFAULT_USER: admin RABBITMQ_DEFAULT_PASS: admin ports: - "15672:15672" # Management UI - "5672:5672" # AMQP networks: - rabbitmq_cluster rabbitmq-node-2: image: rabbitmq:4.0.6-management container_name: rabbitmq-node-2 hostname: rabbitmq-node-2 environment: RABBITMQ_ERLANG_COOKIE: "rabbitmq-cluster-cookie" depends_on: - rabbitmq-node-1 networks: - rabbitmq_cluster rabbitmq-node-3: image: rabbitmq:4.0.6-management container_name: rabbitmq-node-3 hostname: rabbitmq-node-3 environment: RABBITMQ_ERLANG_COOKIE: "rabbitmq-cluster-cookie" depends_on: - rabbitmq-node-1 networks: - rabbitmq_cluster networks: rabbitmq_cluster: driver: bridge
2. Start the cluster
Run:
docker-compose up -d
3. Join nodes to the cluster
After the containers start, manually join the nodes.
1. Access rabbitmq-node-2
docker exec -it rabbitmq-node-2 bash
2. Join the cluster
rabbitmqctl stop_app rabbitmqctl join_cluster rabbit@rabbitmq-node-1 rabbitmqctl start_app
PS D:\workspaces\rabbitmq> docker exec -it rabbitmq-node-2 bash root@rabbitmq-node-2:/# rabbitmqctl stop_app Stopping rabbit application on node rabbit@rabbitmq-node-2 ... root@rabbitmq-node-2:/# rabbitmqctl join_cluster rabbit@rabbitmq-node-1 Clustering node rabbit@rabbitmq-node-2 with rabbit@rabbitmq-node-1 root@rabbitmq-node-2:/# rabbitmqctl start_app Starting node rabbit@rabbitmq-node-2 ...
3. Repeat for rabbitmq-node-3
docker exec -it rabbitmq-node-3 bash rabbitmqctl stop_app rabbitmqctl join_cluster rabbit@rabbitmq-node-1 rabbitmqctl start_app
PS D:\workspaces\rabbitmq> docker exec -it rabbitmq-node-3 bash root@rabbitmq-node-3:/# rabbitmqctl stop_app Stopping rabbit application on node rabbit@rabbitmq-node-3 ... root@rabbitmq-node-3:/# rabbitmqctl join_cluster rabbit@rabbitmq-node-1 Clustering node rabbit@rabbitmq-node-3 with rabbit@rabbitmq-node-1 root@rabbitmq-node-3:/# rabbitmqctl start_app Starting node rabbit@rabbitmq-node-3 ...
4. Verify Cluster
Run:
docker exec -it rabbitmq-node-1 rabbitmqctl cluster_status
You should see:
Cluster status of node rabbit@rabbitmq-node-1 ... [{nodes,[{disc,[rabbit@rabbitmq-node-1,rabbit@rabbitmq-node-2,rabbit@rabbitmq-node-3]}]}]
5. Access the RabbitMQ UI
Visit http://localhost:15672
- Username:
admin
- Password:
admin
Developers should see all 3 nodes in the cluster.

Conclusion
You have successfully set up RabbitMQ using Docker and Docker Compose with a WebUI for monitoring. This setup allows you to manage RabbitMQ efficiently while leveraging containerization for easy deployment and scalability.