Docker ist eines der nützlichsten Werkzeuge, das du auf dem Raspberry Pi einsetzen kannst. Statt Software mühsam zu installieren, zu konfigurieren und bei Updates wieder alles manuell anzupassen, packst du jede Anwendung in einen Container – isoliert, portabel und in Sekunden gestartet. Dieser Artikel zeigt dir, wie du Docker auf dem Raspberry Pi installierst und deinen ersten Container in Betrieb nimmst.

Was ist Docker?
Docker ist eine Container-Technologie: Jede Anwendung läuft in einer eigenen, abgeschlossenen Umgebung mit allen benötigten Bibliotheken und Abhängigkeiten. Das hat mehrere Vorteile gegenüber klassischer Installation:
- Isolation – Anwendungen beeinflussen sich nicht gegenseitig
- Portabilität – ein Container läuft auf jedem Docker-fähigen System identisch
- Einfaches Update – neues Image pullen, Container neu starten, fertig
- Einfaches Entfernen – Container löschen hinterlässt keine Rückstände im System
Auf dem Raspberry Pi läuft Docker hervorragend und ermöglicht es, Dienste wie Pi-hole, Nextcloud, Home Assistant, Portainer oder eigene Projekte in Minuten zu starten – ohne stundenlange Einrichtung.
Voraussetzungen
Empfohlene Hardware
| Modell | Eignung | RAM |
|---|---|---|
| Raspberry Pi 5 (4GB / 8GB) | ⭐⭐⭐⭐⭐ Ideal | 4–8 GB |
| Raspberry Pi 4 (4GB / 8GB) | ⭐⭐⭐⭐ Sehr gut | 4–8 GB |
| Raspberry Pi 4 (2GB) | ⭐⭐⭐ Ausreichend (wenige Container) | 2 GB |
| Raspberry Pi 3 / Zero 2 W | ⭐⭐ Eingeschränkt (nur leichte Container) | 1 GB |
Betriebssystem
Wichtig: Docker auf dem Raspberry Pi benötigt ein 64-bit-Betriebssystem. Das 32-bit Raspberry Pi OS (armhf) wird von vielen aktuellen Docker-Images nicht mehr unterstützt.
Vor der Docker-Installation sicherstellen, dass das System aktuell ist:
|
1 |
sudo apt update && sudo apt upgrade -y |
Docker installieren
Der einfachste und empfohlene Weg ist das offizielle Convenience-Script von Docker:
|
1 2 |
curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh |
Das Script erkennt automatisch die ARM64-Architektur des Raspberry Pi und installiert die passende Docker-Version. Die Installation dauert je nach Internetverbindung 2–5 Minuten.
Docker ohne sudo verwenden
Standardmäßig darf nur root Docker-Befehle ausführen. Um Docker auch als normaler Benutzer (z.B. pi) zu nutzen:
|
1 |
sudo usermod -aG docker $USER |
Danach einmal ab- und wieder anmelden (oder newgrp docker ausführen). Testen:
|
1 |
docker run hello-world |
Wenn alles funktioniert, erscheint eine Erfolgsmeldung. Docker ist betriebsbereit.
Docker-Version prüfen
|
1 2 3 4 |
docker --version # Docker version 27.x.x, build ... docker info | grep "Server Version" |
Docker Compose installieren
Docker Compose ermöglicht es, mehrere Container als Stack in einer einzigen docker-compose.yml-Datei zu definieren und gemeinsam zu starten. Unverzichtbar für praktisch alle Heimserver-Projekte.
Seit Docker Desktop ist Compose als Plugin direkt integriert. Beim Raspberry Pi prüfen:
|
1 2 |
docker compose version # Docker Compose version v2.x.x |
Falls Compose nicht vorhanden ist, nachinstallieren:
|
1 |
sudo apt install docker-compose-plugin |
Grundlegende Docker-Befehle
Images und Container verstehen
In Docker gibt es zwei zentrale Begriffe:
- Image – die Vorlage/Blaupause einer Anwendung (read-only)
- Container – eine laufende Instanz eines Images
Die wichtigsten Befehle im Überblick
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# Image herunterladen docker pull nginx # Container starten (im Hintergrund, Port 80 weiterleiten) docker run -d -p 80:80 --name mein-nginx nginx # Alle laufenden Container anzeigen docker ps # Alle Container anzeigen (auch gestoppte) docker ps -a # Container stoppen docker stop mein-nginx # Container starten (bereits erstellter) docker start mein-nginx # Container löschen docker rm mein-nginx # Alle heruntergeladenen Images anzeigen docker images # Image löschen docker rmi nginx # Logs eines Containers anzeigen docker logs mein-nginx # In einen laufenden Container einsteigen docker exec -it mein-nginx bash |
Volumes: Daten dauerhaft speichern
Container sind flüchtig – wird ein Container gelöscht, sind alle darin gespeicherten Daten weg. Mit Volumes werden Daten auf dem Host-System gespeichert und bleiben erhalten:
|
1 2 3 4 5 6 |
# Lokales Verzeichnis als Volume einbinden docker run -d -p 80:80 -v /home/pi/nginx-data:/usr/share/nginx/html --name mein-nginx nginx |
Erster Praxiseinsatz: Portainer
Portainer ist eine Web-Oberfläche für Docker – damit lassen sich Container, Images, Volumes und Netzwerke bequem über den Browser verwalten, ohne immer auf der Kommandozeile arbeiten zu müssen.

Portainer installieren
Zuerst ein Volume für Portainer-Daten anlegen:
|
1 |
docker volume create portainer_data |
Dann Portainer starten:
|
1 2 3 4 5 6 7 8 |
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest |
Portainer ist jetzt über https://IP-DES-PI:9443 erreichbar. Beim ersten Aufruf Admin-Passwort vergeben und „Get Started“ wählen.
Docker Compose: Mehrere Container als Stack
In der Praxis besteht eine Anwendung oft aus mehreren Containern – z.B. eine Web-App plus Datenbank. Docker Compose fasst diese in einer Datei zusammen.
Beispiel: Pi-hole mit Docker Compose
Projektverzeichnis anlegen:
|
1 |
mkdir ~/pihole && cd ~/pihole |
Datei docker-compose.yml anlegen:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
services: pihole: image: pihole/pihole:latest container_name: pihole ports: - "53:53/tcp" - "53:53/udp" - "80:80/tcp" environment: TZ: 'Europe/Berlin' WEBPASSWORD: 'DEIN_PASSWORT_HIER' volumes: - './etc-pihole:/etc/pihole' - './etc-dnsmasq.d:/etc/dnsmasq.d' restart: unless-stopped |
Stack starten:
|
1 |
docker compose up -d |
Stack stoppen:
|
1 |
docker compose down |
Pi-hole ist nun unter http://IP-DES-PI/admin erreichbar.
Autostart: Container nach Neustart automatisch starten
Damit Container nach einem Neustart des Raspberry Pi automatisch wieder laufen, gibt es zwei Methoden:
restart-Policy (empfohlen)
|
1 2 3 4 5 6 |
# In docker run: docker run -d --restart=always --name mein-container mein-image # In docker-compose.yml: restart: unless-stopped # startet immer neu, außer manuell gestoppt restart: always # startet immer neu, auch nach manuellem Stop |
Docker-Daemon Autostart sicherstellen
|
1 2 |
sudo systemctl enable docker sudo systemctl status docker |
Tipps für den Dauerbetrieb
Log-Rotation einrichten
Ohne Log-Rotation können Container-Logs die SD-Karte oder SSD über Zeit vollschreiben. Global in /etc/docker/daemon.json konfigurieren:
|
1 |
sudo nano /etc/docker/daemon.json |
|
1 2 3 4 5 6 7 |
{ "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" } } |
|
1 |
sudo systemctl restart docker |
Unused Images und Container aufräumen
|
1 2 3 4 5 |
# Alle ungenutzten Ressourcen entfernen (Images, Container, Netzwerke) docker system prune -a # Nur ungenutzten Speicher anzeigen docker system df |
SSD statt SD-Karte verwenden
Docker schreibt häufig auf den Speicher (Layer, Logs, Volumes). Für den Dauerbetrieb empfiehlt sich eine USB-SSD als System- und Datenlaufwerk, da sie deutlich mehr Schreibzyklen verträgt als eine SD-Karte.
Swap einrichten (Pi 4 mit 2GB)
Bei Container-Stacks auf einem Pi 4 mit 2GB RAM kann der Arbeitsspeicher eng werden. Ein Swap-File hilft:
|
1 2 3 4 5 6 |
sudo dphys-swapfile swapoff sudo nano /etc/dphys-swapfile # CONF_SWAPSIZE=2048 sudo dphys-swapfile setup sudo dphys-swapfile swapon |
Nützliche Docker-Container für den Raspberry Pi
| Container | Funktion | RAM |
|---|---|---|
| Portainer | Docker Web-UI | ~100 MB |
| Pi-hole | DNS-Werbeblocker | ~100 MB |
| Home Assistant | Smart Home Zentrale | ~300 MB |
| Nextcloud | Eigene Cloud (Dateien, Kalender) | ~400 MB |
| Vaultwarden | Passwort-Manager (Bitwarden-kompatibel) | ~20 MB |
| Nginx Proxy Manager | Reverse Proxy mit Let’s Encrypt | ~100 MB |
| Grafana + InfluxDB | Sensor-Daten visualisieren | ~400 MB |
Häufige Probleme und Lösungen
„permission denied“ beim Docker-Befehl
Der aktuelle Benutzer ist nicht in der Docker-Gruppe. Lösung:
|
1 2 |
sudo usermod -aG docker $USER # Danach neu anmelden oder: newgrp docker |
Container startet, ist aber nicht erreichbar
Port-Mapping prüfen: docker ps zeigt unter „PORTS“, welche Ports weitergeleitet werden. Außerdem sicherstellen, dass keine Firewall (ufw) den Port blockiert:
|
1 2 |
sudo ufw status sudo ufw allow 9443/tcp |
„no space left on device“
Docker-Images und alte Layer belegen Speicher. Aufräumen:
|
1 |
docker system prune -a --volumes |
Raspberry Pi 32-bit: Image nicht gefunden
Viele aktuelle Images unterstützen kein linux/arm/v7 mehr. Lösung: auf 64-bit Raspberry Pi OS wechseln.
Docker läuft auf dem Raspberry Pi 3, 4 und 5, benötigt aber ein 64-bit-Betriebssystem (Raspberry Pi OS 64-bit oder Ubuntu 64-bit). Der Raspberry Pi Zero und Zero 2 W werden technisch unterstützt, haben aber nur 512 MB bzw. 1 GB RAM – das reicht nur für sehr einfache Container.
Docker ist die Container-Laufzeitumgebung – damit werden einzelne Container gestartet. Docker Compose ist ein Werkzeug, das mehrere Container als zusammengehörigen Stack in einer YAML-Datei definiert und gemeinsam verwaltet. Für praktisch alle Heimserver-Projekte empfiehlt sich Docker Compose.
Das hängt vom RAM-Verbrauch der Container ab. Auf einem Pi 4 mit 4 GB RAM laufen problemlos 8–12 leichte Container (Pi-hole, Vaultwarden, Portainer etc.) gleichzeitig. Ressourcenintensive Container wie Nextcloud oder Home Assistant reduzieren die Anzahl entsprechend.
Ja, Docker läuft problemlos parallel zum Desktop. Für einen dedizierten Server-Betrieb empfiehlt sich aber Raspberry Pi OS Lite (ohne Desktop), da der Desktop selbst RAM benötigt und im Hintergrund unnötige Prozesse läuft.
Nur wenn die restart-Policy gesetzt ist. Mit --restart=always (docker run) oder restart: unless-stopped (docker-compose.yml) starten Container automatisch nach jedem Systemneustart. Ohne diese Einstellung müssen Container manuell gestartet werden.
