Startseite » Blog » Docker auf Ubuntu 24.04/22.04 VPS installieren
Docker auf Ubuntu 24.04/22.04 VPS installieren
- 3. Oktober 2026
- 09:00
- Von Adrien Roche
- Tutorials

Bevor Sie starten: ein KVM-VPS, ein unterstütztes Ubuntu und ein sudo-Benutzer
Docker Engine bringt keinen eigenen Kernel mit. Jeder Container teilt sich den Host-Kernel und stützt sich auf Linux-Namespaces, cgroups und netfilter, der Daemon braucht also einen VPS, auf dem Sie den Kernel besitzen. Genau das bietet ein KVM-VPS (Vollvirtualisierung). Bei containerbasierten Tarifen auf Basis von OpenVZ oder LXC gehört der Kernel dem Anbieter, und Docker verweigert entweder den Start oder funktioniert nur, wenn der Host Nesting aktiviert hat. Prüfen Sie das, bevor Sie irgendetwas installieren:
systemd-detect-virt # expect: kvm
. /etc/os-release && echo "$VERSION_CODENAME" # noble (24.04) or jammy (22.04)
uname -m # x86_64 or aarch64
Docker veröffentlicht Pakete für 64-Bit-Ubuntu 24.04 LTS (noble) und 22.04 LTS (jammy), auf x86_64 und arm64. Außerdem brauchen Sie einen Benutzer mit sudo-Rechten; die Abschnitte zur Gruppe docker und zum rootless-Modus setzen ein normales Konto statt root voraus.
Docker Engine aus dem offiziellen apt-Repository installieren
Es gibt vier gängige Wege, Docker unter Ubuntu zu installieren, und nur einer ist die von Docker dokumentierte und für Server unterstützte Methode:
| Methode | Paket | Fazit |
|---|---|---|
| Dockers apt-Repository | docker-ce von download.docker.com | Empfohlen: aktuelle Versionen, Updates über apt upgrade, Compose- und Buildx-Plugins inklusive. |
| Ubuntu universe | docker.io | Funktioniert, aber Ubuntus eigener Build hinkt Upstream hinterher und enthält die Plugins nicht. |
| Snap | snap install docker | Eingeschränkte Installation mit eigenen Pfaden; häufige Quelle für überraschende "permission denied"-Fehler. Auf Servern vermeiden. |
| Convenience-Skript | get.docker.com | Dieselben Pakete, aber ungeprüft in eine Root-Shell gepipt. Nur für Wegwerf-Maschinen. |
Schritt 1: konfliktträchtige Pakete entfernen
Wenn das VPS-Image bereits Ubuntus docker.io, ein altes docker-compose oder podman-docker enthält, entfernen Sie diese, damit sich die beiden Builds nicht um /usr/bin/docker streiten. Diese Schleife stammt aus der Docker-Dokumentation und ist auf einem sauberen System harmlos; /var/lib/docker bleibt unangetastet:
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do
sudo apt-get remove $pkg
done
Schritt 2: Dockers GPG-Schlüssel und apt-Quelle hinzufügen
Der Schlüssel landet in /etc/apt/keyrings/ und wird per signed-by= referenziert, was ihn auf dieses eine Repository begrenzt, statt ihm über das veraltete apt-key global zu vertrauen. Der Codename wird aus /etc/os-release gelesen, derselbe Block funktioniert also unter 24.04 und 22.04:
sudo apt-get update
sudo apt-get install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
Ein Signaturfehler bei diesem letzten apt-get update bedeutet fast immer, dass die Schlüsseldatei nicht lesbar ist; führen Sie die chmod-Zeile erneut aus.
Schritt 3: Engine und Plugins installieren
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
docker-ce ist der Daemon, docker-ce-cli der Client, containerd.io die darunterliegende Runtime, und die beiden Plugins liefern docker buildx und docker compose. Unter Ubuntu startet das Post-Install-Skript des Pakets docker.service sofort und aktiviert es beim Systemstart.
Schritt 4: mit hello-world überprüfen
sudo docker run hello-world
docker --version
sudo docker info | head -n 20
hello-world ist der entscheidende Test: Der Client spricht mit dem Daemon, der Daemon lädt ein winziges Image von Docker Hub, erstellt einen Container, führt ihn aus und gibt seine Ausgabe zurück. Wenn Sie "Hello from Docker!" sehen, funktioniert jede Schicht. Auf einer gesunden Installation von 24.04 oder 22.04 meldet docker info Storage Driver: overlay2 und Cgroup Version: 2.
Docker ohne sudo nutzen: die Gruppe docker
Der Daemon lauscht am Unix-Socket /var/run/docker.sock, der root:docker gehört, sodass Mitglieder der Gruppe docker die CLI ohne sudo verwenden können:
sudo groupadd docker # usually exists already; harmless if it does
sudo usermod -aG docker $USER
newgrp docker # or log out and back in
docker run hello-world
Machen Sie sich klar, was Sie damit gewähren. Wer diesen Socket erreicht, kann docker run -v /:/host --privileged ... ausführen und jede Datei auf dem VPS lesen oder überschreiben. Damit ist die Mitgliedschaft in der Gruppe docker gleichbedeutend mit Root – ohne Passwortabfrage und ohne sudo-Logeintrag. Behandeln Sie sie genau wie sudo-Zugriff; unser Leitfaden zum Benutzerwechsel und zur Rechteausweitung unter Ubuntu erklärt, warum dieser Unterschied auf einem Mehrbenutzersystem zählt.
Docker-Compose-Plugin
Das Paket docker-compose-plugin stellt Compose v2 als Unterbefehl docker compose bereit (mit Leerzeichen). Das alte Python-Binary docker-compose hat das Support-Ende erreicht und sollte nicht daneben installiert werden. Prüfen Sie die Version und testen Sie dann mit einer minimalen compose.yaml:
docker compose version
mkdir -p ~/web && cd ~/web
cat > compose.yaml <<'EOF'
services:
web:
image: nginx:alpine
ports:
- "127.0.0.1:8080:80"
restart: unless-stopped
EOF
docker compose up -d
docker compose ps
curl -I http://127.0.0.1:8080
docker compose down
Zwei Details sind Absicht: restart: unless-stopped bringt den Container nach einem Neustart zurück, und der Port ist an 127.0.0.1 statt an alle Interfaces gebunden – aus Gründen, die der Firewall-Abschnitt erklärt.
Rootless-Modus: ein Daemon, der nicht root ist
Im rootless-Modus laufen der Daemon und die Container in einem User-Namespace, sodass ein Container-Ausbruch in einem unprivilegierten Konto statt bei root landet. Das ist die richtige Wahl, wenn sich mehrere Personen einen VPS teilen. Voraussetzungen sind untergeordnete UID/GID-Bereiche (Ubuntu legt sie für normale Benutzer in /etc/subuid und /etc/subgid an), die uidmap-Werkzeuge, eine D-Bus-Benutzersitzung und Dockers rootless-Extras:
sudo apt-get install -y uidmap dbus-user-session docker-ce-rootless-extras
grep "^$USER:" /etc/subuid /etc/subgid # each should show a range of 65536 IDs
# optional: stop the system-wide daemon if you only want rootless
sudo systemctl disable --now docker.service docker.socket
dockerd-rootless-setuptool.sh install
Das Setup-Werkzeug erstellt eine systemd-Unit pro Benutzer und gibt die beiden Variablen aus, die Ihre Shell braucht. Tragen Sie sie in ~/.bashrc ein und sorgen Sie dann dafür, dass der Benutzer-Daemon ohne Anmeldung beim Systemstart läuft:
export PATH=/usr/bin:$PATH
export DOCKER_HOST=unix:///run/user/$(id -u)/docker.sock
systemctl --user enable docker
sudo loginctl enable-linger $(whoami)
Der rootless-Modus hat echte Grenzen: Ports unter 1024 lassen sich nur veröffentlichen, wenn Sie sudo setcap cap_net_bind_service=ep $(which rootlesskit) ausführen und den Benutzer-Daemon neu starten, Overlay-Netzwerke stehen nicht zur Verfügung, und die Daten liegen unter ~/.local/share/docker. Unter Ubuntu 24.04 schränkt AppArmor unprivilegierte User-Namespaces ein; die deb-Pakete liefern das Profil mit, das rootlesskit benötigt, bei einer Installation über statische Binaries muss es jedoch von Hand ergänzt werden, wie in der rootless-Dokumentation beschrieben.
Startverhalten, Speicher und Logrotation
Zwei getrennte Dinge entscheiden, ob Ihre Container nach einem Neustart laufen: Der Daemon muss aktiviert sein, und jeder Container braucht eine Restart-Policy. Ubuntus Pakete aktivieren den Dienst für Sie; bestätigen Sie das, und falls Ihnen die Unit-Zustände unbekannt vorkommen, erklärt unsere Referenz zum Auflisten von Diensten mit systemctl jede Spalte:
systemctl is-enabled docker.service containerd.service
sudo systemctl enable docker.service containerd.service # only if the line above said disabled
Container, die ohne --restart gestartet wurden, bleiben nach einem Neustart aus; verwenden Sie --restart unless-stopped auf der Kommandozeile oder restart: unless-stopped in Compose für alles Dauerhafte.
Alles, was Docker speichert – Image-Layer, Container-Dateisysteme, Volumes, Logs – liegt unter /var/lib/docker, und auf einem kleinen VPS ist das genau das Verzeichnis, das die Festplatte füllt. Beobachten Sie es mit docker system df, geben Sie verwaiste Layer mit docker system prune frei und lesen Sie die Rückfrage, bevor Sie -a ergänzen, denn das löscht auch jedes Image, das kein laufender Container nutzt. Hat der VPS eine zweite Festplatte, richten Sie data-root in /etc/docker/daemon.json darauf aus, bevor Sie etwas Großes herunterladen.
Logs verdienen eine eigene Warnung. Der Standardtreiber json-file schreibt jede Zeile der Container-Standardausgabe nach /var/lib/docker/containers/<id>/<id>-json.log und führt keine Rotation durch, solange Sie sie nicht konfigurieren. Ein gesprächiger Container kann die gesamte Festplatte in einer Woche auffressen. Setzen Sie daemonweite Limits vom ersten Tag an:
sudo tee /etc/docker/daemon.json > /dev/null <<'EOF'
{
"log-driver": "json-file",
"log-opts": { "max-size": "10m", "max-file": "3" },
"live-restore": true
}
EOF
sudo systemctl restart docker
Log-Optionen gelten für Container, die nach dem Neustart erstellt werden; langlebige Container müssen Sie also einmal neu erzeugen. live-restore erlaubt dem Daemon, für Upgrades neu zu starten, ohne laufende Container zu beenden.
Docker und ufw: veröffentlichte Ports umgehen Ihre Firewall
Das ist der Punkt, über den die meisten auf einem öffentlichen VPS stolpern. Docker verwaltet eigene iptables-Regeln: Wenn Sie einen Port mit -p 8080:80 veröffentlichen, fügt der Daemon eine DNAT-Regel in die Kette PREROUTING der nat-Tabelle und eine Accept-Regel in FORWARD ein. Die Regeln von ufw liegen in INPUT, das weitergeleiteter Verkehr nie durchläuft. ufw deny 8080 hat also keine Wirkung, und ein auf 0.0.0.0:5432 veröffentlichter Datenbank-Container ist aus dem gesamten Internet erreichbar, während ufw den Port als blockiert meldet. Achten Sie auf 0.0.0.0: in der Spalte PORTS von docker ps oder führen Sie ss -tlnp aus; unser Leitfaden zum Prüfen offener Ports unter Linux zeigt, wie Sie diese Ausgabe lesen und die Erreichbarkeit von außen bestätigen.
Zwei saubere Lösungen, nach Präferenz geordnet:
- Veröffentlichte Ports an Loopback binden.
-p 127.0.0.1:8080:80hält den Dienst nur vom VPS selbst aus erreichbar, typischerweise hinter einem Reverse Proxy wie nginx oder Caddy, den Sie bewusst nach außen öffnen. Container, die nur miteinander sprechen, brauchen überhaupt kein-p. - In der Kette
DOCKER-USERfiltern. Docker wertet diese Kette vor seinen eigenenFORWARD-Regeln aus und schreibt sie nie um. Da DNAT bereits stattgefunden hat, wenn ein Paket dort ankommt, gleichen Sie den ursprünglichen Port mit conntrack ab:
sudo iptables -I DOCKER-USER -i eth0 ! -s 203.0.113.10 -p tcp \
-m conntrack --ctorigdstport 8080 --ctdir ORIGINAL -j DROP
Ersetzen Sie eth0 durch Ihr öffentliches Interface und 203.0.113.10 durch die zugelassene Adresse. Diese Regeln sind nicht dauerhaft; sichern Sie sie mit dem Paket iptables-persistent. "iptables": false in der daemon.json zu setzen, zerstört das Container-Networking auf schwer zu debuggende Weise; lassen Sie die Option in Ruhe.
Docker vollständig deinstallieren
Entfernen Sie zuerst die Pakete per purge und löschen Sie dann die Datenverzeichnisse, die apt bewusst stehen lässt:
sudo apt-get purge -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
sudo rm -rf /var/lib/docker /var/lib/containerd
sudo rm -f /etc/apt/sources.list.d/docker.list /etc/apt/keyrings/docker.asc
sudo apt-get autoremove -y
Bei einem rootless-Setup führen Sie zuerst als Benutzer dockerd-rootless-setuptool.sh uninstall aus und löschen anschließend ~/.local/share/docker.
All das setzt einen Server voraus, auf dem Sie root sind, den Kernel kontrollieren und iptables umschreiben können, ohne jemanden zu fragen. Wenn Sie eine solche Maschine noch brauchen: Der KVM-Linux-VPS mit vollem Root-Zugriff von rdp.monster liefert Ubuntu 24.04 oder 22.04 mit dedizierter CPU und dediziertem RAM, unlimitierter Bandbreite (Fair Use), ohne KYC, mit Krypto-Zahlung, ab $8.99 pro Monat, und wird etwa 10 Sekunden nach Zahlungsbestätigung bereitgestellt – Sie können den hello-world-Test von oben also direkt nach dem Checkout auf Ihrem eigenen Server ausführen.
Häufig gestellte Fragen
Welche Docker-Version installiert apt unter Ubuntu, und wie aktualisiere ich sie?
apt-get install docker-ce die neueste stabile Version für Ihren Ubuntu-Codenamen, und jedes spätere sudo apt-get update && sudo apt-get upgrade bringt Sie weiter nach vorn. Führen Sie docker version aus, um Client- und Server-Version zu sehen. Um eine bestimmte Version festzuhalten, listen Sie die Kandidaten mit apt-cache madison docker-ce auf, installieren docker-ce=<version> zusammen mit dem passenden docker-ce-cli und setzen dann für beide Pakete apt-mark hold.Warum erhalte ich "permission denied while trying to connect to the Docker daemon socket"?
root:docker, ein einfacher Benutzer bekommt daher permission denied. Stellen Sie den Befehlen entweder sudo voran oder fügen Sie sich mit sudo usermod -aG docker $USER hinzu und starten anschließend eine neue Anmeldesitzung (oder führen newgrp docker aus), denn Gruppenänderungen gelten nur für neue Sitzungen. Bleibt der Fehler bestehen, prüfen Sie mit groups die Mitgliedschaft, kontrollieren Sie mit systemctl status docker, ob der Daemon läuft, und stellen Sie sicher, dass DOCKER_HOST nicht auf einen nicht existierenden rootless-Socket zeigt.Soll ich Docker unter Ubuntu Server mit snap oder apt installieren?
daemon.json und die Daten, und sein Update-Rhythmus wird von snapd bestimmt, nicht von Ihnen. Diese Eigenheiten zeigen sich als rätselhafte permission denied-Meldungen und fehlschlagende Bind-Mounts. Die apt-Pakete folgen den üblichen Ubuntu-Konventionen, binden sich normal in systemd ein und erhalten Upstream-Updates über dasselbe apt upgrade, das Sie ohnehin ausführen.Wie viel RAM und Speicherplatz braucht ein Docker-VPS?
/var/lib/docker, und 20 GB füllen sich ohne docker system prune und Logrotation schnell. Bevorzugen Sie dedizierte CPU und dediziertes RAM gegenüber geteilten Burst-Anteilen, denn Builds erzeugen harte Lastspitzen und Container können nicht elegant auslagern.Adrien Roche, Redakteur für Infrastruktur & Hosting
Systemingenieur mit über 10 Jahren Erfahrung im Betrieb von Windows-Server- und Linux-Flotten. Adrien pflegt die Infrastruktur-Dokumentation von rdp.monster und schreibt unsere Guides zu RDP, VPS-Hosting, Serveradministration, Netzwerken und Privacy-Tools.




