Redis mit Docker installieren: Schnellster In-Memory-Key-Value-Store für Cache, Messaging und KI
Redis 8 dient als Cache, Pub/Sub-Broker und Session-Speicher, seit 8.0 auch für Vektorsuche. Diese Anleitung zeigt, wie Sie Redis per Docker Compose mit Passwort und AOF-Persistenz aufsetzen und mit RedisInsight überwachen.
Geprüft am 04.10.2026 · für redis 8.10.2
WerbelinksMit * markierte Links sind Werbelinks: Bei einem Kauf erhalten wir eine Provision, der Preis bleibt gleich. Als Amazon-Partner verdiene ich an qualifizierten Verkäufen. Mehr dazu

Redis ist ein In-Memory-Key-Value-Store: Er hält Daten im Arbeitsspeicher und antwortet dadurch im Mikrosekundenbereich. Typische Einsätze sind Cache vor einer Datenbank, Pub/Sub-Message-Broker, Session-Speicher für Webanwendungen und seit Version 8.0 auch Vektorsuche für KI-Anwendungen. Diese Anleitung zeigt, wie Sie Redis 8 mit Docker Compose auf einem Linux-Host aufsetzen, per Passwort absichern, die Persistenz konfigurieren und mit RedisInsight im Browser überwachen.
Voraussetzungen
- Docker Engine >= 24.x und Docker Compose Plugin >= 2.x auf einem Linux-Host (x86-64 oder ARM64, z. B. Ubuntu, Debian oder ein NAS mit Docker-Unterstützung). Ist Docker noch nicht installiert, folgen Sie zunächst der Anleitung Docker und Docker Compose auf Linux installieren.
- 1 CPU-Kern, mindestens 512 MB freier Arbeitsspeicher für Redis und RedisInsight zusammen, für den Produktivbetrieb 1 bis 2 GB, dazu etwa 1 GB Speicherplatz für Images und Daten.
opensslzum Generieren eines sicheren Passworts (auf allen gängigen Linux-Systemen vorinstalliert).- Optional: ein Reverse Proxy (Traefik, Caddy, Nginx Proxy Manager) mit Anmeldung für RedisInsight.
- Einen Texteditor und Shell-Zugriff auf den Host. Die Ports 6379 und 5540 müssen nicht öffentlich erreichbar sein, die Konfiguration bindet beide an localhost.
Schritt 1: Projektordner anlegen
Legen Sie einen eigenen Ordner für das Projekt an. Hier liegen compose.yaml und .env. Docker Compose verwendet den Ordnernamen als Präfix für Volumes und Netzwerke.
mkdir -p /opt/redis
cd /opt/redisOhne Root-Zugriff nutzen Sie stattdessen ~/redis. Beide Dateien müssen im selben Verzeichnis liegen.
Verifizieren: ls /opt/redis zeigt ein leeres Verzeichnis. Der Befehl pwd gibt /opt/redis zurück.
Schritt 2: .env-Datei mit sicherem Passwort anlegen
Das offizielle Image wertet keine Variable REDIS_PASSWORD aus. Das Passwort geht deshalb per --requirepass im command:-Block an redis-server, Compose setzt den Wert aus der .env ein.
Erzeugen Sie zunächst ein sicheres Passwort:
openssl rand -base64 32Kopieren Sie die Ausgabe und legen Sie die .env-Datei an:
REDIS_PASSWORD=ihr-generiertes-passwortSpeichern Sie die Datei als /opt/redis/.env und beschränken Sie die Rechte, damit kein anderer Systembenutzer das Passwort lesen kann:
chmod 600 /opt/redis/.envVerifizieren: ls -la /opt/redis/.env zeigt Berechtigungen -rw-------. cat /opt/redis/.env zeigt die Zeile mit Ihrem Passwort ohne Leerzeichen oder Anführungszeichen.
Schritt 3: compose.yaml erstellen
Die compose.yaml startet Redis 8 (Alpine) und RedisInsight als Browser-Oberfläche im gemeinsamen Netzwerk redis-net. RedisInsight erreicht Redis dort unter dem Hostnamen redis. Beide Ports sind nur an 127.0.0.1 gebunden und von außen nicht erreichbar.
| Parameter | Wert | Hinweis |
|---|---|---|
| Image Redis | redis:8-alpine | Stand 03.10.2026: 8.10.2-alpine, etwa 50 MB; Multi-Arch (amd64, arm64 u. a.). Zum Festschreiben z. B. redis:8.10.2-alpine |
| Image RedisInsight | redis/redisinsight:latest | Eigenständiges GUI-Image, Port 5540; Tag für den Produktivbetrieb festschreiben |
| Redis-Port | 127.0.0.1:6379:6379 | Nur localhost, kein direkter Außenzugriff |
| RedisInsight-Port | 127.0.0.1:5540:5540 | Browser-UI ohne eigene Anmeldung, daher nur localhost; ältere Quellen nennen 8001 |
| Volume Redis | redis-data:/data | RDB-Snapshots und AOF-Log |
| Volume RedisInsight | redisinsight-data:/data | Verbindungsprofile und Einstellungen |
| Passwort | via .env + command: | ENV allein reicht nicht, Übergabe per --requirepass |
| Persistenz | AOF (appendonly yes) | Zuverlässiger als reines RDB für Produktiv-Einsatz |
| Speicherlimit | 256 MB | Anpassen je nach verfügbarem RAM; Policy: allkeys-lru |
Erstellen Sie /opt/redis/compose.yaml mit folgendem Inhalt:
services:
redis:
image: redis:8-alpine
container_name: redis
restart: unless-stopped
ports:
- "127.0.0.1:6379:6379"
volumes:
- redis-data:/data
command: >
redis-server
--requirepass ${REDIS_PASSWORD}
--appendonly yes
--appendfilename "appendonly.aof"
--loglevel warning
--maxmemory 256mb
--maxmemory-policy allkeys-lru
environment:
- REDIS_PASSWORD=${REDIS_PASSWORD}
healthcheck:
test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD}", "ping"]
interval: 10s
timeout: 5s
retries: 5
start_period: 5s
networks:
- redis-net
redisinsight:
image: redis/redisinsight:latest
container_name: redisinsight
restart: unless-stopped
ports:
- "127.0.0.1:5540:5540"
volumes:
- redisinsight-data:/data
depends_on:
redis:
condition: service_healthy
networks:
- redis-net
volumes:
redis-data:
driver: local
redisinsight-data:
driver: local
networks:
redis-net:
driver: bridge--maxmemory 256mb verhindert, dass Redis unbegrenzt Arbeitsspeicher belegt und der OOM-Killer den Container beendet. Die Policy allkeys-lru passt für reine Caches: Redis verwirft bei Speicherdruck die am längsten nicht genutzten Keys. Nutzen Sie Redis als Datenbank, wählen Sie noeviction. Der Healthcheck enthält -a ${REDIS_PASSWORD}, weil ein Ping ohne Passwort NOAUTH Authentication required liefert und als unhealthy gilt. RedisInsight hat keine eigene Anmeldung und ist deshalb nur an localhost gebunden. Von einem anderen Rechner erreichen Sie es per SSH-Tunnel (ssh -L 5540:localhost:5540 benutzer@server) oder über einen Reverse Proxy mit Anmeldung.
Verifizieren: docker compose -f /opt/redis/compose.yaml config gibt die Konfiguration mit eingesetztem Passwort ohne Fehlermeldung aus.
Schritt 4: Stack starten
Wechseln Sie in den Projektordner und starten Sie den Stack:
cd /opt/redis
docker compose up -dRedisInsight startet dank depends_on mit service_healthy erst, wenn der Redis-Healthcheck erfolgreich war.
Prüfen Sie den Status:
docker compose psErwartete Ausgabe nach 30 bis 60 Sekunden:
NAME IMAGE SERVICE STATUS
redis redis:8-alpine redis Up (healthy)
redisinsight redis/redisinsight:latest redisinsight UpKontrollieren Sie die Logs:
docker compose logs redisVerifizieren: docker compose ps zeigt STATUS = Up (healthy) für Redis. docker compose logs redis endet mit Ready to accept connections, ohne Fehler zu Berechtigungen, Passwort oder Ports. Bleibt der Status auf starting, warten Sie 30 Sekunden und prüfen Sie erneut.
Schritt 5: Verbindung testen mit redis-cli
Testen Sie die Verbindung direkt im Container. Das Image enthält redis-cli. Die Variable REDIS_PASSWORD steht nur im Container zur Verfügung, nicht in Ihrer Host-Shell. Deshalb läuft der Befehl über sh -c mit einfachen Anführungszeichen:
docker exec -it redis sh -c 'redis-cli -a "$REDIS_PASSWORD" ping'Erwartete Antwort:
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
PONGDie Warnung betrifft nur die Sichtbarkeit des Passworts in der Prozessliste. PONG bestätigt Betrieb und Authentifizierung.
Prüfen Sie, ob die AOF-Persistenz aktiv ist:
docker exec -it redis sh -c 'redis-cli -a "$REDIS_PASSWORD" CONFIG GET appendonly'Erwartete Ausgabe:
1) "appendonly"
2) "yes"Schreiben und lesen Sie einen Test-Key:
docker exec -it redis sh -c 'redis-cli -a "$REDIS_PASSWORD" SET testkey s-edv.com'
docker exec -it redis sh -c 'redis-cli -a "$REDIS_PASSWORD" GET testkey'Antwort: OK und dann "s-edv.com".
Verifizieren: PONG auf ping, appendonly = yes in CONFIG GET, SET gibt OK zurück, GET liefert den gespeicherten Wert.
Schritt 6: RedisInsight im Browser einrichten
Öffnen Sie http://localhost:5540 im Browser (auf einem entfernten Server über den SSH-Tunnel aus Schritt 3). Beim ersten Aufruf akzeptieren Sie die Nutzungsbedingungen.
Fügen Sie eine neue Redis-Verbindung hinzu:
- Host:
redis(interner Docker-Netzwerkname, nicht localhost) - Port:
6379 - Password: Ihr Redis-Passwort aus der
.env - Name: frei wählbar, z. B.
Redis lokal
Das Dashboard zeigt Speicherverbrauch, Trefferquote (Hit Rate), verbundene Clients, Befehle pro Sekunde und einen Key-Browser. Prüfen Sie zusätzlich den Health-Endpoint:
curl -s http://localhost:5540/api/health/Erwartete Antwort:
{"status":"up"}Verifizieren: Die Verbindung über den Hostnamen redis klappt, der Key-Browser zeigt den Test-Key aus Schritt 5, curl auf den Health-Endpoint liefert {"status":"up"}.
Schritt 7: Updates und Backups
Updates spielen Sie mit zwei Befehlen ein:
cd /opt/redis
docker compose pull && docker compose up -dCompose lädt das neue Image und startet den Container mit demselben Volume neu, die Daten in redis-data bleiben erhalten. Zur Automatisierung siehe Docker-Container automatisch aktualisieren nach dem Watchtower-Aus an.
Für Backups lösen Sie einen Redis-Snapshot aus und sichern den Volume-Inhalt:
# Manuellen RDB-Snapshot ausloesen (zusaetzlich zur AOF)
docker exec redis sh -c 'redis-cli -a "$REDIS_PASSWORD" BGSAVE'
# Datei-Backup: Volume-Inhalt in tar-Archiv packen
docker run --rm \
-v redis_redis-data:/data \
-v /opt/backups:/backup \
alpine tar czf /backup/redis-data-$(date +%Y%m%d).tar.gz -C /data .Passen Sie /opt/backups an Ihren Backup-Pfad an. Zur Backup-Strategie siehe 3-2-1-Backup-Strategie umsetzen.
Stoppen ohne Datenverlust:
docker compose downdocker compose down -v löscht zusätzlich die Volumes und damit alle Daten.
Verifizieren: Nach docker compose pull && docker compose up -d zeigt docker compose ps wieder Up (healthy). Der GET-Befehl aus Schritt 5 liefert weiterhin "s-edv.com", die Daten sind erhalten.
Troubleshooting / Typische Fehler
- Passwort greift nicht / Redis ohne Authentifizierung erreichbar: Häufigste Ursache ist, dass
REDIS_PASSWORDnur alsenvironment:-Eintrag gesetzt wurde, aber nicht imcommand:-Block als--requirepass ${REDIS_PASSWORD}weitergeführt wird. Das offizielle Image wertet diese Variable nicht aus. Lösung:--requirepass ${REDIS_PASSWORD}imcommand:-Block ergänzen. - NOAUTH Authentication required: Ein Redis-Client (oder der Healthcheck) verbindet sich ohne Passwort, obwohl
--requirepassgesetzt ist. Jedesredis-clibraucht-amit Passwort, im Healthcheck steht"-a", "${REDIS_PASSWORD}"imtest:-Array. Rufen Sieredis-cli -a $REDIS_PASSWORDdirekt perdocker execauf, ist die Variable in der Host-Shell leer: Befehl wie in Schritt 5 übersh -causführen. - Healthcheck bleibt auf starting / Container startet nicht: Prüfen Sie
docker compose logs redis. Häufige Ursachen:.envfehlt oder liegt nicht nebencompose.yaml, oder das Passwort enthält Sonderzeichen wie$. Verwenden Sie ein Passwort ausopenssl rand -hex 32, das nur Buchstaben und Ziffern enthält. - Permission denied on /data: Redis läuft als Benutzer
redis(UID 999). Bei Bind-Mounts braucht UID 999 Schreibrechte:chown 999:999 /pfad/zum/data-ordner. Named Volumes wie hier sind nicht betroffen. - OOM, Redis wird beendet: Ohne
--maxmemorybelegt Redis den gesamten Arbeitsspeicher, bis der Kernel den Prozess beendet. Lösung:--maxmemoryund eine passende--maxmemory-policysetzen. - Port 6379 von außen erreichbar: In der
compose.yamlsteht6379:6379statt127.0.0.1:6379:6379, Docker lauscht dann auf allen Interfaces. Interne Dienste immer an Loopback binden. - RedisInsight zeigt „Connection refused“: Als Host ist
localhoststattrediseingetragen. Im gemeinsamen Netzwerkredis-netgilt der Service-Nameredis. - ACL-Fehler nach Update auf Redis 8: Modul-Befehle wie
JSON.SET,FT.CREATEoderTS.ADDsind jetzt Standard-Kategorien zugeordnet. Eigene ACL-Regeln wie+@all -@writenach dem Upgrade prüfen.
Häufige Fragen
Brauche ich noch redis/redis-stack für JSON, Search oder TimeSeries?
Nein. Seit Redis 8.0 (2025) sind die früheren Redis-Stack-Module JSON, RediSearch, RedisTimeSeries und RedisBloom im offiziellen redis-Image enthalten. JSON.SET, FT.CREATE oder TS.ADD funktionieren direkt mit redis:8-alpine, redis/redis-stack brauchen Sie für neue Projekte nicht.
Kann Redis als Vektor-Datenbank für KI eingesetzt werden?
Ja. RediSearch im Basis-Image unterstützt HNSW- und Flat-Indizes für Vektoren. Mit FT.CREATE legen Sie einen Vektorindex an, mit FT.SEARCH und KNN-Operator suchen Sie ähnliche Einträge. Seit Redis 8 gibt es zusätzlich den Datentyp „Vector Sets“ (Beta) für Embeddings. Damit eignet sich Redis als Vektorspeicher für RAG-Systeme und semantische Suche. Ein vollständiges RAG-System beschreibt die Anleitung Lokales RAG-System mit Qdrant und Embeddings selbst bauen.
Was ist der Unterschied zwischen RDB und AOF?
RDB (Redis Database) erstellt periodische Snapshots der gesamten Datenbank: kompakt und schnell wiederhergestellt, bei einem Absturz fehlen aber alle Schreibvorgänge seit dem letzten Snapshot. AOF (Append-Only File) protokolliert jeden Schreibbefehl. Bei appendfsync everysec (Standard) geht höchstens eine Sekunde verloren. Die AOF-Datei wächst, Redis verdichtet sie automatisch per BGREWRITEAOF. Diese Anleitung setzt deshalb --appendonly yes.
Wie binde ich Redis in eine andere Docker-Anwendung ein?
Hängen Sie Ihre Anwendung in dasselbe Netzwerk, in derselben Compose-Datei oder als externes Netzwerk in einer anderen compose.yaml. Compose legt das Netzwerk mit Projektpräfix an, der tatsächliche Name lautet also redis_redis-net (prüfen mit docker network ls). Redis ist dann unter dem Hostnamen redis auf Port 6379 erreichbar:
networks:
redis-net:
external: true
name: redis_redis-netDer Connection-String Ihrer Anwendung lautet dann z. B. redis://:${REDIS_PASSWORD}@redis:6379.
Welche Lizenz hat Redis 8, dürfen Sie es kommerziell einsetzen?
Redis 8 steht wahlweise unter RSALv2, SSPLv1 oder AGPLv3 (Redis 7.2 und älter unter BSD-3). Interne Nutzung und Einbindung in eigene Anwendungen sind in aller Regel frei, die Einschränkungen treffen vor allem Anbieter von Redis als verwaltetem Dienst. Im Zweifel lesen Sie die Lizenzdatei im Redis-Repository.
Fazit
Mit zwei Dateien (compose.yaml und .env) steht Redis 8 in wenigen Minuten. Die Konfiguration vermeidet die drei häufigsten Fehler: Passwort nicht per command: übergeben, kein Volume für Persistenz, Port öffentlich erreichbar. TLS, Sentinel oder Cluster bauen darauf auf.
Wie Sie Passwörter als Docker Secrets statt im Klartext verwalten, zeigt Docker Compose absichern: Secrets, Healthchecks, Non-Root und Read-Only für den Produktivbetrieb.
Weiterführende Anleitungen und Quellen
- Docker und Docker Compose auf Linux installieren (Ubuntu/Debian): die Self-Hosting-Grundlage
- Docker Compose absichern: Secrets, Healthchecks, Non-Root und Read-Only für den Produktivbetrieb
- Docker-Container automatisch aktualisieren nach dem Watchtower-Aus: Diun, WUD und Renovate im Vergleich
- Lokales RAG-System mit Qdrant und Embeddings selbst bauen: Schritt-für-Schritt-Anleitung
- Supabase mit Docker installieren: Open-Source-Firebase-Alternative
- Meilisearch mit Docker installieren: Blitzschnelle Suchmaschinen-Engine
Offizielle Quellen: Redis auf Docker Hub. Redis Install on Docker (redis.io). What's new in Redis 8.0. RedisInsight Install on Docker.


