MQTT Broker in Docker: Mosquitto Setup für IoT

MQTT ist ein leichtgewichtiges Publish/Subscribe-Protokoll, das in der IoT-Welt weit verbreitet ist. Ein MQTT-Broker wie Mosquitto kann effizient in Docker betrieben werden, wodurch Deployment, Updates und Skalierung stark vereinfacht werden. In diesem Tutorial zeigen wir, wie man Mosquitto in Docker für IoT-Szenarien sicher und performant aufsetzt.

Docker-Image auswählen und starten

Das offizielle Mosquitto-Image bietet alle notwendigen Features für den schnellen Einstieg:

docker run -d 
  --name mosquitto 
  -p 1883:1883 
  -p 9001:9001 
  -v mosquitto-data:/mosquitto/data 
  -v mosquitto-log:/mosquitto/log 
  -v mosquitto-config:/mosquitto/config 
  eclipse-mosquitto:2
  • Port 1883 ist Standard-MQTT
  • Port 9001 ermöglicht WebSocket-Zugriffe
  • Volumes sichern Konfiguration, Daten und Logs persistent

Konfiguration von Mosquitto

Die Broker-Konfiguration erfolgt über Dateien im /mosquitto/config-Volume. Minimal ist eine mosquitto.conf erforderlich:

persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log
listener 1883
allow_anonymous false
password_file /mosquitto/config/passwordfile

Benutzer und Passwörter setzen

docker exec -it mosquitto mosquitto_passwd -c /mosquitto/config/passwordfile username
  • Der Broker verlangt nun Authentifizierung
  • Passwörter werden in der Datei passwordfile gespeichert
  • Für Produktion TLS einsetzen

Sicherheit und TLS

TLS schützt Datenübertragungen. Zertifikate können aus LetsEncrypt oder internen CA stammen:

listener 8883
cafile /mosquitto/config/ca.crt
certfile /mosquitto/config/server.crt
keyfile /mosquitto/config/server.key
  • Port 8883 für verschlüsselte MQTT-Verbindungen
  • WebSocket TLS analog konfigurieren

Netzwerk-Isolation

MQTT-Broker sollte nur von den IoT-Geräten oder Services erreichbar sein:

docker network create mqtt-net
docker run -d --name mosquitto --network mqtt-net 
  -v mosquitto-data:/mosquitto/data 
  -v mosquitto-log:/mosquitto/log 
  -v mosquitto-config:/mosquitto/config 
  eclipse-mosquitto:2
  • Keine unnötigen Ports nach außen freigeben
  • Nur andere Container im Netzwerk können direkt verbinden

Healthchecks und Restart-Policies

Zur Stabilität empfiehlt sich ein Healthcheck:

docker run -d --name mosquitto 
  --network mqtt-net 
  --health-cmd="mosquitto_sub -h localhost -t 'healthcheck' -C 1" 
  --health-interval=30s 
  --health-retries=3 
  -v mosquitto-data:/mosquitto/data 
  -v mosquitto-log:/mosquitto/log 
  -v mosquitto-config:/mosquitto/config 
  eclipse-mosquitto:2
  • Docker markiert Container als unhealthy, wenn Healthcheck fehlschlägt
  • Restart-Policy kann automatische Neustarts ermöglichen

Logging und Monitoring

Logs sind zentral im Volume mosquitto-log abgelegt und können für Monitoring genutzt werden:

docker exec -it mosquitto tail -f /mosquitto/log/mosquitto.log
  • Überwachung von Fehlermeldungen und Verbindungsproblemen
  • Integration in zentrale Logging-Lösungen wie Loki oder ELK möglich

Backups

MQTT-Persistenzdaten sollten regelmäßig gesichert werden:

docker exec mosquitto sh -c 'cp -r /mosquitto/data /backup/mosquitto_$(date +%F)'
  • Volume mosquitto-data enthält alle persistierten Messages
  • Backups automatisieren via Cron oder CI/CD

Best Practices zusammengefasst

  • Persistente Volumes für Daten und Logs
  • Benutzer und Passwörter für Authentifizierung
  • TLS für verschlüsselte Kommunikation
  • Netzwerk-Isolation durch eigenes Docker-Netzwerk
  • Healthchecks und Restart-Policies aktivieren
  • Regelmäßige Backups einplanen
  • Monitoring der Logs und Verbindungen

Mit diesen Maßnahmen lässt sich Mosquitto in Docker stabil, sicher und performant für IoT-Anwendungen betreiben. Durch persistente Speicherung, abgesicherte Kommunikation und Überwachung bleiben Container zuverlässig im Betrieb und unterstützen skalierbare IoT-Architekturen.

Konfiguriere Cisco Router & Switches und liefere ein Packet-Tracer-Lab/GNS3

Ich biete professionelle Unterstützung im Bereich Netzwerkkonfiguration und Network Automation für private Anforderungen, Studienprojekte, Lernlabore, kleine Unternehmen sowie technische Projekte. Ich unterstütze Sie bei der Konfiguration von Routern und Switches, der Erstellung praxisnaher Topologien in Cisco Packet Tracer, dem Aufbau und Troubleshooting von GNS3- und EVE-NG-Labs sowie bei der Automatisierung von Netzwerkaufgaben mit Netmiko, Paramiko, NAPALM und Ansible. Kontaktieren Sie mich jetzt – klicken Sie hier.

Meine Leistungen umfassen:

  • Professionelle Konfiguration von Routern und Switches

  • Einrichtung von VLANs, Trunks, Routing, DHCP, NAT, ACLs und weiteren Netzwerkfunktionen

  • Erstellung von Topologien und Simulationen in Cisco Packet Tracer

  • Aufbau, Analyse und Fehlerbehebung von Netzwerk-Labs in GNS3 und EVE-NG

  • Automatisierung von Netzwerkkonfigurationen mit Python, Netmiko, Paramiko, NAPALM und Ansible

  • Erstellung von Skripten für wiederkehrende Netzwerkaufgaben

  • Dokumentation der Konfigurationen und Bereitstellung nachvollziehbarer Lösungswege

  • Konfigurations-Backups, Optimierung bestehender Setups und technisches Troubleshooting

Benötigen Sie Unterstützung bei Ihrem Netzwerkprojekt, Ihrer Simulation oder Ihrer Network-Automation-Lösung? Kontaktieren Sie mich jetzt – klicken Sie hier.

Related Articles