OpenSpeedTest per Docker einrichten: WLAN- und LAN-Geschwindigkeit im Heimnetz messen¶
Veröffentlicht am 14. Oktober 2026 · Geschätzte Lesezeit: 6 Minuten
OpenSpeedTest ist ein browserbasierter Geschwindigkeitstest, der vollständig auf deinem eigenen Server läuft. Du öffnest die Weboberfläche auf dem Handy, Notebook oder Desktop, klickst auf Start, und der Test misst die tatsächliche Übertragungsrate zwischen deinem Gerät und dem Server – ohne dass Daten über das Internet zu einem externen Speedtest-Dienst gehen.[1][3] Damit findest du heraus, ob eine langsame Verbindung am WLAN, am Kabel, am Gerät oder am Internetanschluss liegt. Die Einrichtung mit Docker dauert etwa 20 bis 35 Minuten.
Diese Anleitung folgt der offiziellen Docker-Image-Dokumentation auf GitHub und der Projektseite für selbst gehostete Speedtests.[1][3] Das Praxisvideo How to install OpenSpeedTest on Docker zeigt den Ablauf ergänzend.[6]
Voraussetzungen
- Ein Linux-Server mit Docker und Docker Compose (Plugin)
- Terminal-Zugriff mit
sudo-Rechten - Ein freier TCP-Port 3000 im Heimnetz
- Die feste LAN-IP-Adresse deines Docker-Hosts (DHCP-Reservierung oder statisch)
- Ein zweites Gerät (Handy, Notebook) zum Testen
1. Feste LAN-IP des Docker-Hosts ermitteln¶
Der Speedtest-Container soll nur im vertrauenswürdigen Heimnetz erreichbar sein und nicht auf allen Netzwerkschnittstellen lauschen. Dafür brauchst du die feste LAN-Adresse deines Servers. Stelle sicher, dass dein Server eine per DHCP reservierte oder statisch konfigurierte IP hat (z. B. 192.168.1.50). Prüfe die Adresse:
Hat dein Server mehrere Netzwerkschnittstellen (z. B. VLAN, VPN), notiere die Adresse der physikalischen LAN-Schnittstelle (beginnt meist mit 192.168., 10. oder 172.16.). Verwende nicht die erste Adresse blind, wenn du nicht sicher bist, welche Schnittstelle ins Heimnetz zeigt.
2. Projektverzeichnis anlegen¶
Erstelle einen eigenen Ordner für OpenSpeedTest:
OpenSpeedTest speichert keine eigenen Nutzdaten – das Image enthält nur statische HTML‑, CSS- und JavaScript‑Dateien und benötigt keine persistenten Volumes.[1][3]
3. Datei .env mit der LAN-IP erstellen¶
Damit der Port nur auf der LAN-Schnittstelle lauscht und nicht versehentlich von außen erreichbar ist, legst du die IP in einer Umgebungsvariablen-Datei fest:[4]
Inhalt der .env:
Ersetze 192.168.1.50 durch die tatsächliche LAN-IP deines Servers aus Schritt 1. Die Datei sollte nach der Erstellung nur von dir lesbar sein – sie enthält zwar kein Passwort, aber die IP gibt einen Angriffspunkt preis:
4. Docker-Compose-Datei erstellen¶
Erstelle compose.yaml im selben Verzeichnis:
services:
openspeedtest:
image: openspeedtest/latest
container_name: openspeedtest
restart: unless-stopped
ports:
- "${LAN_IP}:3000:3000"
| Einstellung | Bedeutung |
|---|---|
image: openspeedtest/latest |
Offizielles Docker-Image von OpenSpeedTest; basiert auf nginxinc/nginx-unprivileged:stable-alpine[1][2] |
container_name: openspeedtest |
Eindeutiger Containername für docker‑Befehle |
restart: unless-stopped |
Startet den Container nach einem Neustart des Hosts automatisch wieder |
ports: "${LAN_IP}:3000:3000" |
Bindet Port 3000 ausschließlich an die LAN-IP – kein Zugriff von außen ohne Router-Freigabe |
Der Container stellt außerdem auf Port 3001 HTTPS mit einem selbstsignierten Zertifikat bereit.[2] Für die reine Diagnose im vertrauenswürdigen Heimnetz reicht HTTP auf Port 3000. Port 3001 sollte nur freigegeben werden, wenn du die Zertifikatskonfiguration verstehst – die selbstsignierte Variante führt sonst zu unnötigen Browser-Warnungen.
5. Konfiguration prüfen und Image laden¶
Prüfe, ob die Compose-Datei und die .env korrekt sind:
Zeigt die Ausgabe die expandierte IP (ports: 192.168.1.50:3000:3000), ist alles richtig. Fehlt eine Variable, liegt die .env nicht im selben Ordner oder der Schlüssel ist falsch geschrieben.
Lade das Docker-Image:
Halte den Image-Digest für eine reproduzierbare Konfiguration fest:
Notiere die ausgegebene Digest-Zeile. Wenn du später das Tag latest durch den Digest ersetzt, bleibt der Container jederzeit auf dem getesteten Stand.[1]
6. Container starten¶
Prüfe, ob der Container läuft:
Die Logs sollten eine vollständige Startmeldung ohne wiederkehrende Fehler zeigen.
7. Speedtest von einem anderen Gerät ausführen¶
Öffne auf einem zweiten Gerät (Handy, Notebook) im selben Netzwerk einen Browser und rufe auf:
Ersetze 192.168.1.50 durch die IP deines Servers. Du siehst die OpenSpeedTest-Oberfläche mit einem Start-Button.
Der Test misst: - Download: Server → Client (Daten fließen vom Server zum Browser) - Upload: Client → Server (Daten fließen vom Browser zum Server) - Ping: Round-Trip-Latenz (Millisekunden) - Jitter: Schwankung der Latenz (Millisekunden)[5]
Führe je einen Test über WLAN (mobil) und über Ethernet (fest verkabelt) aus. Sind die Werte über Kabel deutlich höher, liegt das Problem am WLAN. Sind beide gleich niedrig, ist der Server oder das Netzwerk der Engpass.
8. Server-Name anpassen (optional)¶
Über die Umgebungsvariable SET_SERVER_NAME kannst du den Namen ändern, der in der Weboberfläche angezeigt wird. Ergänze die compose.yaml um den environment-Block:
services:
openspeedtest:
image: openspeedtest/latest
container_name: openspeedtest
restart: unless-stopped
ports:
- "${LAN_IP}:3000:3000"
environment:
- SET_SERVER_NAME=Heimnetz-Speedtest
Starte den Container nach der Änderung neu:
Backup und Rückweg¶
OpenSpeedTest speichert keine persistenten Nutzdaten. Zu sichern sind lediglich compose.yaml, .env und der notierte Image-Digest.
Stoppen und entfernen:
Ein zuvor getestetes Image wiederherstellen: Trage den notierten Digest in image: ein, führe docker compose pull && docker compose up -d aus. Zum vollständigen Entfernen lösche anschließend den Projektordner.
Risiken¶
- latest-Tag:
openspeedtest/latestkann sich jederzeit ändern. Notiere vor Aktualisierungen den Digest und den aktuellen Funktionszustand. - Kein Passwortschutz: Jeder, der die IP und den Port kennt, kann einen Speedtest ausführen. Binde den Port deshalb nur an die LAN-IP und gib keine Router-Portweiterleitung frei.
- Ressourcen-Auslastung: Speedtests erzeugen kurzzeitig hohe Netzwerklast. Führe keine unbeaufsichtigten Dauertests aus.
- „Secure by Design“: Der Hersteller bezeichnet die Anwendung wegen der statischen Dateien als „secure by design“.[3] Das befreit nicht von regelmäßigen Updates des Containers und des Docker-Hosts.
Typische Fehler¶
| Problem | Ursache und Lösung |
|---|---|
| Browser zeigt „Verbindung abgelehnt“ | Falsche LAN_IP in der .env, Container nicht gestartet, Port 3000 bereits belegt oder Firewall blockiert. |
docker compose config meldet fehlende Variable |
.env fehlt, liegt im falschen Ordner oder LAN_IP ist falsch geschrieben. |
| Testwerte sind deutlich niedriger als erwartet | WLAN-Signal, 2,4‑GHz‑Verbindung, Energiesparmodus am Client oder langsamer Ethernet-Port prüfen. |
| Werte entsprechen ungefähr dem Internet-Tempo | Möglicherweise hast du einen externen Speedtest-Dienst im Browser statt des lokalen Tests aufgerufen. |
| Reverse Proxy bricht den Upload ab | POST-Request-Limit unter 35 MB oder Proxy-Timeout unter 60 Sekunden – beides erhöhen.[3] |
| HTTPS-Warnung auf Port 3001 | Selbstsigniertes Zertifikat – für das Heimnetz Port 3000 ohne HTTPS verwenden. |
9. Funktionsprüfung (abschließend)¶
docker compose configendet ohne Fehler.docker compose pszeigt den Container als laufend.docker compose logs --tail=50 openspeedtestzeigt keine wiederkehrenden Startfehler.curl -I http://192.168.1.50:3000/liefert eine erfolgreiche HTTP-Antwort (HTTP/1.1 200 oder 301).- Die Oberfläche ist von mindestens einem zweiten Gerät im Heimnetz erreichbar.
- Ein Test über Ethernet und einer über WLAN liefern unterschiedliche, plausible Werte.
- Der Container startet nach
docker compose restartzuverlässig neu. - Von außerhalb des Heimnetzes (z. B. Mobilfunk) ist
http://<deine-öffentliche-IP>:3000/nicht erreichbar (keine Router-Portweiterleitung konfiguriert).
Fertig¶
Du betreibst jetzt einen lokalen Speedtest-Server, der unabhängig von Internet-Verbindung und externen Diensten arbeitet. Wiederhole die Tests in regelmäßigen Abständen und dokumentiere die Werte – so erkennst du Verschlechterungen im WLAN oder an der Verkabelung, bevor sie zum Problem werden.
Sources: [1] https://github.com/openspeedtest/Docker-Image — OpenSpeedTest Docker Image – GitHub [2] https://hub.docker.com/r/openspeedtest/latest — openspeedtest/latest – Docker Hub [3] https://openspeedtest.com/selfhosted-speedtest — OpenSpeedTest Self-Hosted SpeedTest – Offizielle Seite [4] https://docs.docker.com/engine/network/port-publishing — Docker Port Publishing – Docker Docs [5] https://selfhosting.sh/apps/openspeedtest — Self-Hosting OpenSpeedTest – Praxisguide [6] https://www.youtube.com/watch?v=VOl5hybFfnA — How to install OpenSpeedTest on Docker – YouTube (Jeremy Leik)