Docker auf dem Raspberry Pi installieren und nutzen
Docker und Docker Compose auf dem Raspberry Pi sauber aus dem offiziellen Repository installieren, ersten Stack mit Uptime Kuma starten und Fehler lösen.
Von Nathan Base
Ein Raspberry Pi mit Docker ist der einfachste Einstieg ins Selfhosting: Pi-hole, Uptime Kuma, Vaultwarden, Nextcloud oder Home-Assistant-Helfer laufen dann jeweils in einem eigenen Container und lassen sich mit einem Befehl starten, aktualisieren und wieder entfernen. Viele Anleitungen im Netz arbeiten dafür noch mit Skripten aus dem Internet, die direkt in die Shell gepipt werden, oder mit dem veralteten Paket docker.io aus den Debian-Quellen.
Diese Anleitung geht den Weg, den Docker selbst für 64-Bit-Systeme empfiehlt: Installation aus dem offiziellen Docker-Repository für Debian, auf dem Raspberry Pi OS aufbaut. Danach startest Du einen ersten Stack mit Docker Compose und lernst die typischen Stolpersteine kennen. Getestet habe ich die Installationsbefehle in einem Debian-13-Container („Trixie“) auf arm64, also derselben Basis und Architektur wie Raspberry Pi OS auf dem Pi 5. Installiert wurden dabei Docker 29.9.3 und Docker Compose 5.7.1.
Voraussetzung: ein 64-Bit-System
Docker baut ab Version 29 keine Pakete mehr für das 32-Bit-Raspberry-Pi-OS. Du brauchst deshalb die 64-Bit-Version von Raspberry Pi OS, die auf dem Pi 3, Pi 4, Pi 5 und dem Zero 2 W läuft. Ob Dein System passt, prüfst Du per SSH mit:
uname -mSteht dort aarch64, bist Du richtig. Bei armv7l läuft ein 32-Bit-System, dann spielst Du Raspberry Pi OS (64-bit) mit dem Raspberry Pi Imager neu auf. Ältere Modelle wie der Pi 1 oder der erste Zero werden von Docker gar nicht unterstützt.
Für einen Pi, der dauerhaft Container laufen lässt, empfehle ich einen Raspberry Pi 5 mit 8 GB (Affiliate Link). Wenn Du nur ein, zwei leichte Dienste betreiben willst, reicht auch ein gebrauchter Raspberry Pi 4 (Affiliate Link). Bring das System vor der Installation auf den aktuellen Stand:
sudo apt update
sudo apt full-upgrade -yDocker aus dem offiziellen Repository installieren
Zuerst räumen wir eventuell vorhandene inoffizielle Pakete weg, die mit Docker kollidieren würden. Auf einem frischen System meldet apt hier nur, dass nichts davon installiert ist. Das ist in Ordnung.
sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-doc docker-buildx podman-docker containerd runc | cut -f1)Jetzt holen wir den Signaturschlüssel von Docker. Mit ihm prüft apt später, dass die Pakete wirklich von Docker stammen.
sudo apt install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.ascAls Nächstes tragen wir das Repository als Paketquelle ein. Der Befehl liest den Codenamen Deines Systems (bei aktuellem Raspberry Pi OS trixie) und die Architektur (arm64) selbst aus, Du kannst ihn also unverändert kopieren:
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/debian
Suites: $(. /etc/os-release && echo "$VERSION_CODENAME")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOFDie Ausgabe zeigt Dir den fertigen Inhalt der Datei. Prüf dort kurz, dass bei Suites wirklich trixie oder bookworm steht und bei Architectures der Wert arm64. Dann installieren wir Docker mit allen Bestandteilen, also der Engine, dem Kommandozeilenprogramm, containerd sowie den Plugins für Buildx und Compose:
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginUnter Debian und Raspberry Pi OS startet Docker danach automatisch und auch bei jedem Neustart. Ob alles geklappt hat, siehst Du mit:
sudo docker run hello-worldDocker lädt dabei ein winziges Test-Image herunter und startet es. Erscheint „Hello from Docker!“, läuft die Installation.
Docker ohne sudo: die Gruppe docker
Damit Du nicht vor jeden Befehl sudo schreiben musst, nimmst Du Deinen Benutzer in die Gruppe docker auf. Die Gruppe legt das Paket bei der Installation selbst an.
sudo usermod -aG docker $USERDie neue Gruppe gilt erst nach einer neuen Anmeldung. Melde Dich also per exit ab und per SSH wieder an, danach funktioniert docker run hello-world ohne sudo.
Du solltest wissen, was Du damit tust: Laut Docker verleiht die Gruppe docker Rechte auf Root-Niveau. Wer Mitglied ist, kann über einen Container das ganze System verändern. Auf einem Pi, an dem nur Du arbeitest, ist das üblich und vertretbar. Nimm aber keine weiteren Benutzer in diese Gruppe auf, denen Du keinen Root-Zugang geben würdest.
Der erste Stack mit Docker Compose
Einzelne docker run-Befehle mit langen Parametern sind schnell vergessen. Mit Docker Compose beschreibst Du einen Dienst stattdessen in einer Datei und startest ihn mit einem kurzen Befehl. Als Beispiel nehmen wir Uptime Kuma, ein schlankes Werkzeug, das Deine Websites und Dienste überwacht.
Leg einen Ordner für den Stack an und wechsle hinein:
mkdir -p ~/docker/uptime-kuma
cd ~/docker/uptime-kumaÖffne mit nano compose.yaml eine neue Datei und füge diesen Inhalt ein:
services:
uptime-kuma:
image: louislam/uptime-kuma:2
container_name: uptime-kuma
restart: unless-stopped
ports:
- "3001:3001"
volumes:
- ./data:/app/dataSpeichere mit Strg + O, bestätige mit Enter und schließe den Editor mit Strg + X. Die Datei sagt Docker: Nimm das Image von Uptime Kuma in Version 2, starte es nach einem Neustart des Pi automatisch wieder, mach Port 3001 im Heimnetz erreichbar und speichere alle Daten im Unterordner data, damit sie ein Update des Containers überleben.
Jetzt startest Du den Stack im Hintergrund:
docker compose up -dNach rund 20 Sekunden zeigt docker compose ps den Container mit dem Status Up und dem Zusatz (healthy). Öffne dann im Browser http://IP-DES-PI:3001 und ersetze IP-DES-PI durch die Adresse Deines Pi, die Du mit hostname -I herausfindest. Uptime Kuma begrüßt Dich mit der Einrichtung des Admin-Kontos. Ich habe genau diese Compose-Datei auf arm64 getestet, der Container lief nach 20 Sekunden und meldete sich als gesund.
Wenn Du Compose genauer verstehen willst, etwa wie Volumes, Netzwerke und .env-Dateien zusammenspielen, lies Docker Compose verstehen: Volumes, Netzwerke und .env.
Images für arm64: worauf Du achten musst
Der Raspberry Pi hat einen ARM-Prozessor, die meisten Server dagegen x86. Ein Image läuft auf dem Pi nur, wenn es eine Variante für arm64 (auch aarch64 genannt) gibt. Die großen Projekte wie Uptime Kuma, Pi-hole, Nextcloud oder Vaultwarden bauen das inzwischen alle mit. Auf Docker Hub siehst Du es unter dem Reiter „Tags“ in der Spalte „OS/ARCH“: Dort muss linux/arm64 stehen.
Fehlt die Variante, bricht der Start mit dieser Meldung ab:
no matching manifest for linux/arm64/v8 in the manifest list entriesDann hilft kein Trick, sondern nur ein anderes Image oder ein Rechner mit x86-Prozessor.
Docker-Daten auf die SSD legen
Docker schreibt Images, Container und Volumes nach /var/lib/docker. Auf einer microSD-Karte führt das dauerhafte Schreiben früher oder später zu Ausfällen, und die Karte ist außerdem langsam. Für einen Pi, der ernsthaft Container betreibt, lohnt sich deshalb eine NVMe-SSD im Format 2230 (Affiliate Link) mit passendem Adapter. Am einfachsten ist es, gleich das ganze System von der SSD zu starten. Dann liegt auch /var/lib/docker automatisch dort, und Du musst nichts umkonfigurieren. Wie das geht, steht in Raspberry Pi 5 von NVMe-SSD booten statt microSD-Karte.
Speicherplatz im Blick behalten und aufräumen
Mit jedem Update bleiben alte Image-Versionen liegen. Wie viel Platz Docker belegt, zeigt Dir:
docker system dfDie Spalte RECLAIMABLE sagt, wie viel Du freigeben kannst. Ungenutzte Images entfernst Du mit:
docker image prune -aDer Befehl fragt vor dem Löschen nach und entfernt nur Images, die kein Container mehr benutzt. Laufende Dienste und Deine Volumes bleiben unberührt. Wie Du Container regelmäßig und kontrolliert aktualisierst, zeigt Docker-Container aktualisieren: Diun statt Watchtower.
Häufige Fehler
permission denied while trying to connect to the docker API: Dein Benutzer ist noch nicht in der Gruppe docker, oder Du hast Dich nach dem usermod noch nicht neu angemeldet. Mit groups siehst Du, ob docker in der Liste steht. Wenn nicht, melde Dich ab und wieder an.
docker: 'compose' is not a docker command: Das Compose-Plugin fehlt. Installiere es mit sudo apt install docker-compose-plugin nach. Der alte Befehl docker-compose mit Bindestrich gehört zu einer eingestellten Version und wird nicht mehr gebraucht.
E: Package 'docker-ce' has no installation candidate: Die Paketquelle stimmt nicht. Schau mit cat /etc/apt/sources.list.d/docker.sources nach, ob dort arm64 und ein gültiger Codename stehen. Steht dort armhf, läuft ein 32-Bit-System, das Docker für Raspberry Pi OS seit Version 29 nicht mehr unterstützt. Spiel dann die 64-Bit-Version auf.
Port bereits belegt: Meldet Compose address already in use, nutzt ein anderer Dienst den Port schon. Ändere in der compose.yaml die linke Zahl, zum Beispiel "3002:3001", und ruf die Seite dann über Port 3002 auf.
Wenn Deine Dienste später auch von außen oder per HTTPS erreichbar sein sollen, geht es mit Reverse Proxy mit Caddy: HTTPS für Dienste im Heimnetz weiter.
Weiterlesen.
-
Selfhosting & WebDocker Compose verstehen: Volumes, Netzwerke und .env
Docker Compose verständlich erklärt: Named Volume oder Bind Mount, Dienstnamen als Hostnamen, .env-Variablen, Healthchecks, sichere Updates und Backups.
Nathan Base -
Raspberry Pi & LinuxRaspberry Pi 5 von NVMe-SSD booten statt microSD-Karte
Raspberry Pi 5 mit M.2 HAT+ und NVMe-SSD: Einbau, Bootloader aktualisieren, System auf die SSD bringen und die Bootreihenfolge umstellen.
Nathan Base -
Selfhosting & WebDocker-Container aktualisieren: Diun statt Watchtower
Watchtower ist eingestellt. Mit Diun und ntfy erfährst Du von neuen Docker-Images und aktualisierst Container kontrolliert statt blind.
Nathan Base -
Selfhosting & WebReverse Proxy mit Caddy: HTTPS für Dienste im Heimnetz
Caddy als Reverse Proxy mit Docker: gültige Let's-Encrypt-Zertifikate für Home Assistant und Co. per DNS-Challenge, ohne Portfreigabe im Heimnetz.
Nathan Base -
Raspberry Pi & LinuxImmich installieren: iCloud-Fotos selbst hosten
Immich mit Docker auf Raspberry Pi 5 oder Mini-PC installieren, die Mediathek aus Apple Fotos importieren und das iPhone automatisch sichern.
Nathan Base -
Raspberry Pi & LinuxRaspberry Pi 5 oder Mini-PC für Home Assistant?
Raspberry Pi 5, Home Assistant Green oder Mini-PC mit Intel N150: Stromverbrauch, Stromkosten pro Jahr im 24/7-Betrieb und Gesamtkosten über fünf Jahre.
Nathan Base