A fully containerized web app to monitor, manage, and view live stats/logs for all your Docker containers.
100% Docker-based | No local dependencies | Linux optimized
- π Live Monitoring: Real-time CPU, RAM, Network, and Disk usage with interactive charts
- π‘ Bandwidth Tracking: Monitor total data downloaded/uploaded by each container
- π qBittorrent Integration: Accurate bandwidth tracking for VPN-bound qBittorrent containers
- β±οΈ Time Range Controls: View bandwidth stats for Last 24h, Week, Month, or All Time
- π Log Streaming: View live container logs with WebSocket streaming
- ποΈ Container Management: Start, stop, and restart containers with one click
- π¨ Modern UI: Ultra-modern glass-morphism design with animated gradients
- π Authentication: Optional login system with bcrypt password hashing
- π³ Portainer Integration: Use Portainer as a gateway for multi-host support
- π¦ Fully Containerized: No Node.js, npm, or any local dependencies required
- π§ Linux Optimized: Designed and tested for Linux servers
Monitor all your containers at a glance with real-time stats
Detailed metrics with interactive charts and live updates
# Clone the repository
git clone https://github.com/MNDL-27/docker-dashboard.git
cd docker-dashboard
# Copy the example compose file
cp docker-compose.example.yml docker-compose.yml
# Edit docker-compose.yml if needed (optional authentication, port changes, etc.)
nano docker-compose.yml
# Build and start
docker compose up -d --buildThat's it! π Access the dashboard at http://localhost:3002
By default, authentication is disabled. To enable it:
- Set
AUTH_ENABLED=trueindocker-compose.yml - Add user credentials:
environment: - AUTH_ENABLED=true - AUTH_USER=admin - AUTH_PASSWORD=yourpassword
- Restart:
docker compose restart dashboard
For accurate bandwidth tracking of VPN-bound qBittorrent containers:
- Ensure your qBittorrent WebUI is accessible from the Dashboard container
- Add these environment variables to
docker-compose.yml:environment: - QBITTORRENT_URL=http://qbittorrent:8080 - QBITTORRENT_USERNAME=admin - QBITTORRENT_PASSWORD=adminpass
- Restart:
docker compose restart dashboard
To manage containers across multiple Docker hosts:
- Ensure you have Portainer running
- Add these environment variables:
environment: - PORTAINER_ENABLED=true - PORTAINER_URL=http://portainer:9000 - PORTAINER_API_KEY=your_api_key
- Restart:
docker compose restart dashboard
βββββββββββββββββββββββββββββββββββββββββββ
β Docker Dashboard Container β
β βββββββββββββββββββββββββββββββββββ β
β β Node.js Backend (Express) β β
β β - WebSocket for live updates β β
β β - Docker API integration β β
β βββββββββββββββββββββββββββββββββββ β
β βββββββββββββββββββββββββββββββββββ β
β β Frontend (HTML/CSS/JS) β β
β β - Chart.js for visualizations β β
β β - Modern glass-morphism UI β β
β βββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββ
β Docker Socket (Mounted)
βββββββββββββββββββββββββββββββββββββββββββ
β Host Docker Daemon β
β (monitors all containers) β
βββββββββββββββββββββββββββββββββββββββββββ
- Container Stats: Fetched via Docker API using
/var/run/docker.sock - Network Bandwidth: Calculated from container network interface stats
- qBittorrent Stats: Retrieved from qBittorrent WebUI API (if configured)
- Real-time Updates: Pushed to frontend via WebSocket every second
- π³ Docker with Compose V2
- π§ Linux host (Ubuntu, Debian, etc.)
- πΎ 50MB disk space
- π Port 3002 available (or customizable)
Note: This dashboard is designed for Linux servers. Some features may not work correctly on macOS or Windows due to Docker networking differences.
Edit docker-compose.yml:
ports:
- "8080:3002" # Access at localhost:8080Bandwidth stats are stored in /app/data/bandwidth.db (SQLite). Mount a volume to persist data:
volumes:
- ./data:/app/data
- /var/run/docker.sock:/var/run/docker.sock:roFor WebSocket support, ensure your proxy passes upgrade headers:
Nginx:
location / {
proxy_pass http://localhost:3002;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}Caddy:
dashboard.example.com {
reverse_proxy localhost:3002
}
- Ensure
/var/run/docker.sockis mounted correctly - Check container logs:
docker compose logs dashboard
- Verify WebUI is accessible from the Dashboard container
- Test:
docker exec dashboard curl http://qbittorrent:8080 - Check credentials in environment variables
- If behind a reverse proxy, ensure WebSocket upgrade headers are passed
- Check firewall rules
docker-dashboard/
βββ src/
β βββ server.js # Main Express server
β βββ public/ # Frontend files
β β βββ index.html
β β βββ styles.css
β β βββ script.js
β βββ utils/
β βββ dockerStats.js # Docker API wrapper
β βββ bandwidthDB.js # SQLite database handler
βββ docker-compose.example.yml
βββ Dockerfile
βββ README.md
- docker-compose.example.yml - Example Docker Compose configuration
- Dockerfile - Container build instructions
- start.sh - Interactive helper script
Contributions are welcome! We'd love your help to make Docker Dashboard even better.
- π Report bugs using our bug report template
- β¨ Suggest features using our feature request template
- π» Submit pull requests following our PR template
- π Improve documentation in the wiki or README
- Fork the repository
- Read our Contributing Guide
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
Please read CONTRIBUTING.md for detailed guidelines.
This project is licensed under the Apache 2.0 License with Commons Clause.
- β Free to use for personal and educational purposes
- β Open source - view, modify, and contribute to the code
- β Share and redistribute with proper attribution
- β Cannot be sold or offered as a commercial service
What is Commons Clause?
Commons Clause prevents companies from selling this software as a product or service without contributing back. You can use it freely, but you cannot monetize it commercially.
See LICENSE for full details.
Made with β€οΈ for the Docker community
β Star this repo β’ π Report Bug β’ π‘ Request Feature

