Docker auf Ubuntu installieren: APT, Snap, Rootless – Komplette Anleitung 2026

Wählen Sie den richtigen Docker-Installationspfad auf Ubuntu.

Inhaltsverzeichnis

Die Installation von Docker auf Ubuntu sollte einfach sein, aber in der Praxis konkurrieren mehrere docker-spezifische Optionen um den gleichen Befehlsnamen, wobei jede unterschiedliche Paketierung, Upgrade-Verhalten und Sicherheitsimplikationen mit sich bringt.

Dieser Leitfaden vergleicht alle wichtigen Installationswege, damit Sie diejenige Option wählen können, die am besten zu Ihrer Maschine passt.

Zu den Optionen, auf die Sie stoßen werden, gehören:

  • docker.io aus den Ubuntu-Repositories
  • docker-ce aus dem offiziellen APT-Repository von Docker
  • Docker über Snap
  • Docker Desktop
  • manuell heruntergeladene .deb-Pakete
  • das Docker-Bequemlichkeitsskript (Convenience Script)
  • Rootless Docker

docker workplace

Obwohl sie alle Container-Tools bereitstellen, sind sie keine austauschbaren Pakete. Die beste Wahl hängt davon ab, ob die Maschine ein Entwickler-Workstation, ein CI-Runner, ein kleiner Server, ein Self-Hosting-System oder ein Produktionshost ist. Meine Standardempfehlung ist ruhig, aber bestimmt: Für die meisten technischen Nutzer auf normalen Ubuntu-Maschinen sollte Docker Engine aus dem offiziellen APT-Repository von Docker installiert werden. Nutzen Sie Ubuntus docker.io nur, wenn die Integration in die Distribution wichtiger ist als die Upstream-Paketierung von Docker. Vermeiden Sie das Snap-Paket, es sei denn, Sie wollen Snap-spezifisches Verhalten explizit und verstehen dessen Grenzen. Rootless Docker ist bekanntenswert, ist aber nicht automatisch die beste Standardeinstellung für jede Maschine.

Dieser Leitfaden erklärt die Abwägungen, behandelt die Sicherheit nach der Installation und bietet Ihnen saubere Installationspfade für jede Methode. Sobald Docker Engine läuft, ist die Docker Cheatsheet Ihr täglicher Befehlsreferenz, und die Docker Compose Cheatsheet deckt Multi-Container-Setups ab. Beide ergänzen die Anleitungen zu Git, VS Code und CI/CD in Developer Tools: Der umfassende Leitfaden für moderne Entwicklungsworkflows.

Kurze Empfehlung

Die folgende Tabelle fasst zusammen, welcher Installationspfad für gängige Szenarien geeignet ist.

Anwendungsfall Empfohlene Installation
Entwickler-Workstation Offizielles Docker-APT-Repository
CI-Runner Offizielles Docker-APT-Repository, Version bei Bedarf fixiert
Kleiner selbst gehosteter Server Offizielles Docker-APT-Repository
Produktionsserver Offizielles Docker-APT-Repository, kontrollierte Upgrades
Konservatives Ubuntu-System nur mit Ubuntu-Paketen Ubuntu-Paket docker.io
Schneller Desktop-Test Docker Desktop oder offizielles APT-Repository
Snap-geführtes Ubuntu-Setup Docker Snap, mit Vorsicht
Strikte Anforderung an nicht-root-Daemon Rootless Docker
Air-gapped Host (isoliert vom Internet) Manuelle .deb-Pakete oder internes Mirror

Wenn Sie keinen besonderen Grund haben, eine andere Wahl zu treffen, ist das offizielle APT-Repository von Docker die Standardeinstellung.

Was installiert wird

Ein normales Docker Engine-Setup umfasst mehrere Komponenten:

  • Docker-Daemon: dockerd
  • Docker CLI: docker
  • Container-Runtime: containerd
  • Low-Level-Runtime: runc
  • Buildx-Plugin: docker buildx
  • Compose-Plugin: docker compose

Modernes Docker Compose wird normalerweise als Docker-CLI-Plugin installiert. Das bedeutet, der Befehl lautet:

docker compose version

Nicht:

docker-compose version

Der alte Befehl docker-compose existiert zwar noch in älteren Leitfäden und auf älteren Systemen, aber neue Ubuntu-Setups sollten im Allgemeinen das Compose-Plugin verwenden.

Option 1: Docker aus dem offiziellen APT-Repository von Docker installieren

Dies ist der beste Standard für die meisten Entwickler und DevOps-Nutzer. Sie erhalten die Upstream-Paketierung von Docker, aktuelle Docker Engine-Release-Versionen, Buildx, das Compose-Plugin und einen normalen APT-Upgrade-Pfad.

Konfliktierende Pakete zuerst entfernen

Bevor Sie Docker CE installieren, entfernen Sie Pakete, die mit den offiziellen Docker-Paketen in Konflikt stehen könnten.

sudo apt remove docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc

Es ist in Ordnung, wenn APT meldet, dass einige dieser Pakete nicht installiert sind.

Dieser Befehl entfernt keine Docker-Images, Container, Volumes oder Netzwerke, die unter /var/lib/docker gespeichert sind. Wenn Sie einen vollständigen Reset wünschen, ist dies ein separater Schritt und sollte bewusst durchgeführt werden.

Offizielles APT-Repository von Docker hinzufügen

Installieren Sie die Voraussetzungen:

sudo apt update
sudo apt install ca-certificates curl

Erstellen Sie das Keyring-Verzeichnis:

sudo install -m 0755 -d /etc/apt/keyrings

Laden Sie den Repository-Schlüssel von Docker herunter:

sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
  -o /etc/apt/keyrings/docker.asc

Erlauben Sie APT, den Schlüssel zu lesen:

sudo chmod a+r /etc/apt/keyrings/docker.asc

Fügen Sie das Docker-Repository im deb822-.sources-Format hinzu:

sudo tee /etc/apt/sources.list.d/docker.sources > /dev/null <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

Aktualisieren Sie die APT-Metadaten:

sudo apt update

Docker Engine, Buildx und Compose installieren

sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Prüfen Sie den Dienststatus:

sudo systemctl status docker

Falls er nicht läuft:

sudo systemctl start docker

Überprüfen Sie die Installation:

sudo docker run hello-world

Prüfen Sie die Versionen:

docker --version
docker buildx version
docker compose version

An diesem Punkt funktioniert Docker, obwohl Sie für die meisten Befehle immer noch sudo benötigen, es sei denn, Sie konfigurieren den Nicht-Root-Zugang im nachfolgenden Abschnitt zur Nachinstallation.

Option 2: Docker aus Ubuntu-Repositories installieren

Ubuntu stellt das Paket docker.io bereit, das Sie mit folgendem Befehl installieren können:

sudo apt update
sudo apt install docker.io docker-compose-v2

Starten und aktivieren Sie Docker:

sudo systemctl enable --now docker

Überprüfen Sie die Installation:

sudo docker run hello-world

Wann Ubuntu docker.io Sinn macht

Ubuntus Paket kann eine gute Wahl sein, wenn:

  • Sie von Ubuntu verwaltete Pakete bevorzugen.
  • Sie eine Version wollen, die mit Ubuntus Release-Prozess abgestimmt ist.
  • Sie viele Ubuntu-Hosts mit Standard-Repositories verwalten.
  • Sie nicht die neueste Upstream-Docker-Version benötigen.
  • Sie weniger Drittanbieter-APT-Quellen wünschen.

Dies ist eine vernünftige Wahl. Sie ist nicht „falsch“.

Wann Ubuntu docker.io nicht ideal ist

Verwenden Sie stattdessen das offizielle Repository von Docker, wenn:

  • Sie die aktuelle Upstream-Docker Engine möchten.
  • Sie der eigenen Dokumentation von Docker folgen wollen.
  • Sie auf aktuelles Buildx- und Compose-Verhalten angewiesen sind.
  • Sie Docker-CE-Paketnamen bevorzugen.
  • Sie Probleme gegen die Upstream-Docker-Dokumentation debuggen.
  • Sie eine vorhersagbare Docker-Version-Kompatibilität über Distributionen hinweg benötigen.

Meine Neigung: Für Entwicklermaschinen und container-intensive Hosts nutzen Sie das offizielle APT-Repository von Docker. Für konservative, von Ubuntu verwaltete Maschinen ist docker.io akzeptabel.

Option 3: Docker mit Snap installieren

Das Docker-Snap wird mit einem einzigen Befehl installiert, aber Einfachheit bedeutet nicht immer vorhersagbares Verhalten auf einem Server oder einer Entwicklungsmaschine.

sudo snap install docker

Snap-Pakete haben ihr eigenes Paketierungsmodell, Update-Verhalten, Konfinement-Annahmen (Isolation) und Dateisystemlayout. Das ist für viele Desktop-Apps in Ordnung, aber Docker Engine ist bereits eine systemweite Container-Runtime, sodass die zusätzliche Snap-Ebene überraschen kann. Wenn Sie andere Software mit Snap verwalten, erklärt die Snap Package Manager Cheatsheet Kanäle, Konfinement und das Update-Verhalten im Detail.

Wann Docker Snap Sinn macht

Docker Snap kann sinnvoll sein, wenn:

  • Sie Software bewusst mit Snap verwalten.
  • Sie Ubuntu Core oder eine Snap-lastige Umgebung nutzen.
  • Sie snap-typische automatische Updates wünschen.
  • Sie experimentieren und es Ihnen egal ist, ob Sie den Anweisungen von Docker für das APT-Repository folgen.

Warum ich Docker Snap normalerweise vermeide

Ich vermeide das Docker-Snap normalerweise für Entwicklungs- und Serverzwecke, weil:

  • Die meisten Docker-Dokumentationen das Standard-Layout von Docker Engine voraussetzen.
  • Fehlerbehebungspfade von APT-Installationen abweichen können.
  • Die Dienstverwaltung weniger transparent wirken kann.
  • Snap-Auto-Updates für Infrastruktursoftware unpraktisch sein können.
  • Einige Bind-Mounts, Sockets und Details zur Host-Integration Sie überraschen können.

Wenn Docker zentral für Ihren Workflow ist, installieren Sie es wie Infrastruktur und nicht wie eine beiläufige Desktop-App – selbst wenn eine Snap-Installation auf den ersten Blick verlockend wirkt.

Option 4: Docker aus manuellen .deb-Paketen installieren

Eine manuelle Installation von .deb-Paketen ist nützlich, wenn:

  • Die Maschine keine externen APT-Repositories nutzen kann.
  • Sie einen Offline-Installationsprozess aufbauen.
  • Sie Pakete intern spiegeln.
  • Sie strenge Änderungskontrolle benötigen.

Der Nachteil ist der Wartungsaufwand, da Sie bei jedem Upgrade neue Pakete manuell herunterladen und installieren müssen.

Eine manuelle Installation erfordert normalerweise diese Pakete:

  • containerd.io
  • docker-ce
  • docker-ce-cli
  • docker-buildx-plugin
  • docker-compose-plugin

Installieren Sie sie mit:

sudo dpkg -i ./containerd.io_*.deb \
  ./docker-ce_*.deb \
  ./docker-ce-cli_*.deb \
  ./docker-buildx-plugin_*.deb \
  ./docker-compose-plugin_*.deb

Beheben Sie bei Bedarf fehlende Abhängigkeiten:

sudo apt --fix-broken install

Überprüfen Sie die Installation:

sudo systemctl status docker
sudo docker run hello-world

Manuelle .deb-Installationen sind nicht meine erste Wahl, aber sie bleiben für kontrollierte oder air-gapped Umgebungen gültig, in denen eine explizite Paketfreigabe wichtiger ist als Bequemlichkeit.

Option 5: Das Bequemlichkeitsskript von Docker verwenden

Docker stellt ein Bequemlichkeitsskript zur Verfügung:

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

Sie können eine Vorschau dessen erstellen, was es tun würde:

sudo sh get-docker.sh --dry-run

Das Bequemlichkeitsskript ist nützlich für wegwerfbare Testmaschinen, Demos, Labore und temporäre Umgebungen, aber ich würde es nicht als Hauptinstallationsmethode für Produktionssysteme verwenden. Ein Skript, das Repositories konfiguriert und Pakete nicht-interaktiv installiert, ist praktisch, aber langfristige Infrastruktur verdient explizite, überprüfbare Schritte – verwenden Sie also für Produktionshosts direkt die APT-Repository-Methode.

Docker Desktop vs. Docker Engine auf Ubuntu

Docker Desktop für Linux ist ein anderes Produkt als Docker Engine. Docker Engine ist die serverseitige Runtime und der CLI-Workflow, den die meisten Linux-Servernutzer erwarten, während Docker Desktop eine GUI, Desktop-Integrationen und ein Produkt-Erlebnis hinzufügt, das der Docker-Nutzung unter macOS und Windows näher kommt.

Verwenden Sie Docker Desktop, wenn:

  • Sie eine grafische Docker-Erfahrung wünschen.
  • Sie Desktop-Funktionen benötigen.
  • Sie sich mit einem Team abstimmen, das Docker Desktop standardisiert.
  • Sie die zusätzliche Schicht in Kauf nehmen.

Verwenden Sie Docker Engine, wenn:

  • Sie einen Server betreiben.
  • Sie eine einfache, Linux-nativen Runtime wünschen.
  • Sie systemd-verwaltete Dienste bevorzugen.
  • Sie CI, DevOps oder selbst gehostete Infrastruktur aufbauen.
  • Sie die GUI nicht benötigen.

Für ein technisch fortgeschrittenes Blog-Publikum ist Docker Engine normalerweise die interessantere Standardeinstellung auf Linux-Servern und CI-Hosts.

Nach der Installation: Docker ohne Sudo ausführen

Nach der Installation funktioniert dies:

sudo docker ps

Aber dies kann fehlschlagen:

docker ps

Das liegt daran, dass der Docker-Daemon auf einem Unix-Socket hört, dem root gehört. Die gängige Lösung ist, Ihren Benutzer zur Gruppe docker hinzuzufügen.

Erstellen Sie die Gruppe bei Bedarf:

sudo groupadd docker

Fügen Sie Ihren Benutzer hinzu:

sudo usermod -aG docker $USER

Wenden Sie die neue Gruppenmitgliedschaft an:

newgrp docker

Oder melden Sie sich ab und wieder an.

Testen Sie es:

docker run hello-world

Wichtiger Sicherheitshinweis zur Docker-Gruppe

Die Gruppe docker ist keine harmlose Bequemlichkeitsgruppe. Ein Benutzer, der den Docker-Daemon steuern kann, erhält in der Regel root-äquivalente Kontrolle über den Host. Daher ist dies auf einer persönlichen Entwicklermaschine oft akzeptabel, auf einem gemeinsam genutzten Server jedoch eine ernste Entscheidung zur Zugriffskontrolle. Behandeln Sie die Mitgliedschaft in der Gruppe docker wie Administratordatenzugriff, und wenn dies zu weit geht, denken Sie über Rootless Docker nach.

Rootless Docker auf Ubuntu

Rootless Docker führt den Docker-Daemon und Container als Nicht-Root-Benutzer aus. Das ist nicht dasselbe wie Ihr Benutzer zur Gruppe docker hinzuzufügen – mit der Gruppe docker läuft der Daemon weiterhin als root, während im Rootless-Modus der Daemon selbst als Ihr Benutzer läuft.

Wann Rootless Docker Sinn macht

Rootless Docker ist nützlich, wenn:

  • Sie das Risiko auf Daemonebene durch root-Rechte reduzieren möchten.
  • Sie sich auf einer gemeinsam genutzten Entwicklungsmaschine befinden.
  • Sie benutzereigene Container ausführen.
  • Sie nicht jede erweiterte Netzwerk- und Speicherfunktion benötigen.
  • Sie ein sichereres Standardverhalten für experimentelle Workloads wünschen.

Wann Rootless Docker lästig sein kann

Rootless Docker kann weniger komfortabel sein, wenn:

  • Sie privilegierte Container benötigen.
  • Sie auf die Bindung an niedrige Ports ohne zusätzliche Einrichtung angewiesen sind.
  • Sie bestimmte Host-Netzwerk-Muster benötigen.
  • Sie ein Verhalten erwarten, das identisch mit root-basiertem Docker ist.
  • Sie Leitfäden befolgen, die für normale Docker Engine-Installationen geschrieben wurden.

Der Rootless-Modus verbessert die Sicherheitslage, bietet aber nicht die gleiche Reibungslosigkeit wie eine Standard-Root-Installation.

Rootless Docker installieren

Installieren Sie die Voraussetzungen:

sudo apt update
sudo apt install uidmap

Wenn Sie Docker über DEB- oder APT-Pakete installiert haben, sollte das Setup-Tool für Rootless verfügbar sein:

dockerd-rootless-setuptool.sh install

Wenn root-basiertes Docker bereits läuft und Sie nur Rootless Docker wollen, deaktivieren Sie den Systemdaemon:

sudo systemctl disable --now docker.service docker.socket

Möglicherweise müssen Sie auch den root-basierten Socket entfernen:

sudo rm -f /var/run/docker.sock

Nach der Installation von Rootless Docker gibt das Setup-Tool normalerweise Umgebungsvariablen aus, die Sie Ihrem Shell-Profil hinzufügen sollten. Sie sehen in der Regel so aus:

export PATH=/usr/bin:$PATH
export DOCKER_HOST=unix:///run/user/1000/docker.sock

Ihre UID kann abweichen. Überprüfen Sie die genaue Ausgabe des Setup-Tools.

Aktivieren Sie Lingering (dauerhaften Betrieb), wenn Sie möchten, dass der Benutzerdienst auch nach dem Abmelden läuft:

sudo loginctl enable-linger $USER

Überprüfen Sie den Benutzerdienst:

systemctl --user status docker

Starten Sie einen Testcontainer:

docker run hello-world

Rootful Docker vs. Rootless Docker

Thema Rootful Docker Rootless Docker
Daemon-Benutzer root normaler Benutzer
Befehlsbequemlichkeit hoch mittel
Kompatibilität höchst gut, aber nicht perfekt
Sicherheitslage standardmäßig schwächer standardmäßig besser
Privilegierte Container unterstützt begrenzt
Niedrige Ports einfach erfordert zusätzliche Einrichtung
Servernutzung üblich möglich, aber sorgfältig planen
Entwickler-Workstation üblich gut für sicherheitsbewusste Benutzer

Meine praktische Empfehlung:

  • Verwenden Sie normales root-basiertes Docker für eine persönliche Dev-Maschine oder einen einfachen Server.
  • Fügen Sie nur vertrauenswürdigen Benutzern die Gruppe docker hinzu.
  • Verwenden Sie Rootless Docker, wenn Benutzerisolierung wichtig ist.
  • Tun Sie nicht so, als wäre die Gruppe docker eine Sicherheitsgrenze.

Docker beim Booten aktivieren

Auf Ubuntu startet Docker, das aus normalen Paketen installiert wurde, normalerweise automatisch, aber es lohnt sich, dies nach einer frischen Installation oder Migration zu bestätigen.

Überprüfen Sie:

systemctl is-enabled docker
systemctl is-enabled containerd

Aktivieren Sie manuell bei Bedarf:

sudo systemctl enable docker.service
sudo systemctl enable containerd.service

Starten Sie jetzt:

sudo systemctl start docker

Deaktivieren Sie den Autostart:

sudo systemctl disable docker.service
sudo systemctl disable containerd.service

Verwenden Sie für Rootless Docker den Benutzerdienst:

systemctl --user enable docker
systemctl --user start docker

Und aktivieren Sie bei Bedarf Lingering:

sudo loginctl enable-linger $USER

Docker Compose installieren oder überprüfen

Mit dem offiziellen APT-Repository von Docker installieren Sie Compose als Plugin:

sudo apt update
sudo apt install docker-compose-plugin

Überprüfen Sie:

docker compose version

Wenn Sie das Ubuntu-Paket installiert haben, können Sie Folgendes verwenden:

sudo apt install docker-compose-v2

Bevorzugen Sie:

docker compose up -d

Anstatt des alten Stils:

docker-compose up -d

Der mit Bindestrich versehene Befehl docker-compose gehört zur älteren Ära des eigenständigen Compose. Viele Systeme haben ihn immer noch, aber neue Dokumentation sollte docker compose verwenden.

Prüfen, welches Docker installiert ist

Wenn Sie eine Maschine übernehmen oder ein fehlerhaftes Setup debuggen, helfen diese Befehle dabei zu identifizieren, welche Docker-Paketierung tatsächlich verwendet wird.

Überprüfen Sie die Docker-Binärdatei:

which docker

Überprüfen Sie die Paketzuordnung:

dpkg -S "$(which docker)"

Listen Sie docker-bezogene Pakete auf:

dpkg -l | grep -E 'docker|containerd|runc'

Überprüfen Sie die APT-Richtlinie:

apt-cache policy docker-ce docker.io containerd.io docker-compose-plugin docker-compose-v2

Überprüfen Sie Snap:

snap list | grep docker

Überprüfen Sie den Dienststatus:

systemctl status docker
systemctl status containerd

Überprüfen Sie Docker-Serverdetails:

docker info

Falls docker info ohne sudo fehlschlägt, überprüfen Sie Ihre Gruppenmitgliedschaft:

groups

Migration von Ubuntu docker.io zu Docker CE

Stoppen Sie Docker:

sudo systemctl stop docker

Entfernen Sie Ubuntu-Pakete:

sudo apt remove docker.io docker-compose docker-compose-v2 docker-doc containerd runc

Fügen Sie das offizielle APT-Repository von Docker mit den oben genannten Schritten hinzu.

Installieren Sie Docker CE:

sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Starten Sie Docker:

sudo systemctl start docker

Überprüfen Sie vorhandene Container:

docker ps -a
docker images
docker volume ls

Normalerweise löscht das Entfernen der Pakete nicht /var/lib/docker, sodass Ihre Images, Container und Volumes möglicherweise noch vorhanden sind. Sichern Sie wichtige Daten dennoch zuerst.

Migration von Docker Snap zu Docker CE

Erstellen Sie zunächst einen Überblick über den aktuellen Zustand:

snap list | grep docker
docker info

Stoppen Sie Workloads und sichern Sie wichtige Volumes oder bind-mounted Daten.

Entfernen Sie den Snap:

sudo snap remove docker

Installieren Sie dann Docker CE aus dem offiziellen APT-Repository.

Seien Sie vorsichtig mit Datenorten. Snap-Pakete verwenden oft andere Pfade und Konfinement-Regeln. Gehen Sie nicht davon aus, dass Docker-Snap-Daten nach der Migration automatisch unter dem Standardpfad /var/lib/docker erscheinen.

Exportieren oder sichern Sie Daten für wichtige Dienste explizit, bevor Sie die Paketquelle wechseln.

Eine Docker-Version mit APT fixieren (Pin)

Für produktionsähnliche Systeme möchten Sie möglicherweise kontrollierte Upgrades.

Listen Sie verfügbare Versionen auf:

apt list --all-versions docker-ce

Installieren Sie eine spezifische Version:

VERSION_STRING="5:29.0.0-1~ubuntu.24.04~noble"

sudo apt install docker-ce=$VERSION_STRING \
  docker-ce-cli=$VERSION_STRING \
  containerd.io \
  docker-buildx-plugin \
  docker-compose-plugin

Fixieren Sie Docker-Pakete (Haltebefehl):

sudo apt-mark hold docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Entfernen Sie die Fixierung später:

sudo apt-mark unhold docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Tun Sie dies, wenn Sie vorhersagbare Änderungszeitfenster benötigen. Für ein persönliches Laptop kann dies unnötig sein.

Hinweise zu Firewall und Netzwerk

Docker ändert Paketfilterregeln, damit Container-Netzwerke funktionieren, was relevant ist, wenn Sie UFW, firewalld, nftables oder benutzerdefinierte Firewall-Regeln verwenden.

Wichtige Punkte:

  • Veröffentlichte Docker-Ports können naive UFW-Erwartungen umgehen.
  • Docker verwendet iptables-Integration.
  • Benutzerdefinierte Regeln sollten Docker-erstellte Chains berücksichtigen.
  • Server-Härtung sollte mit echten Container-Port-Mappings getestet werden.
  • Gehen Sie nicht davon aus, dass ufw deny einen von Docker veröffentlichten Port schützt.

Testen Sie exponierte Ports von einer anderen Maschine aus, nicht nur von localhost.

Beispiel:

docker run --rm -p 8080:80 nginx

Dann von einem anderen Host aus:

curl http://server-ip:8080

Auf Servern ist Docker-Netzwerkteil Ihres Sicherheitsmodells, kein Implementierungsdetail, das Sie nach der Installation ignorieren können.

Häufige Fehler und Lösungen

Permission Denied auf Docker-Socket

Fehler:

permission denied while trying to connect to the Docker daemon socket

Lösungsoptionen:

Verwenden Sie sudo:

sudo docker ps

Oder fügen Sie Ihren Benutzer zur Gruppe docker hinzu:

sudo usermod -aG docker $USER
newgrp docker

Denken Sie daran, dass die Gruppe docker in der Praxis root-äquivalent ist, behandeln Sie also die Gruppenmitgliedschaft als Entscheidung für privilegierten Zugriff.

Docker-Daemon läuft nicht

Überprüfen Sie den Status:

sudo systemctl status docker

Starten Sie ihn:

sudo systemctl start docker

Überprüfen Sie die Logs:

journalctl -u docker --no-pager -n 100

Konfliktierende Docker-Pakete

Falls die Installation von Docker CE aufgrund von Konflikten fehlschlägt, entfernen Sie alte Pakete. Wenn APT selbst nach dem Hinzufügen des Docker-Repositories in einem schlechten Zustand ist, arbeiten Sie zuerst durch Ubuntu APT-Problembehebung für gebrochene Pakete und GPG-Fehler bevor Sie es erneut versuchen.

sudo apt remove docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc

Versuchen Sie es dann erneut:

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Compose-Befehl nicht gefunden

Überprüfen Sie modernes Compose:

docker compose version

Installieren Sie das Plugin:

sudo apt install docker-compose-plugin

Falls Sie den alten Befehl erwartet haben:

docker-compose version

Sie könnten veralteter Dokumentation folgen. Bevorzugen Sie das Aktualisieren des Befehls auf docker compose.

Altes root-eigenes Docker-Konfigurationsverzeichnis

Wenn Sie Docker zuvor mit sudo ausgeführt haben, bevor Sie den Gruppenzugriff eingerichtet haben, könnte Ihre Benutzerkonfiguration root gehören.

Korrigieren Sie die Eigentumsrechte:

sudo chown "$USER":"$USER" "$HOME/.docker" -R
sudo chmod g+rwx "$HOME/.docker" -R

Oder entfernen Sie die Konfiguration, wenn Sie sie nicht benötigen:

sudo rm -rf "$HOME/.docker"

Sie wird neu erstellt.

Kann nicht mit Rootless Docker verbinden

Überprüfen Sie die Umgebung:

echo "$DOCKER_HOST"

Überprüfen Sie den Benutzerdienst:

systemctl --user status docker

Setzen Sie den Socket-Pfad bei Bedarf:

export DOCKER_HOST=unix:///run/user/$(id -u)/docker.sock

Fügen Sie ihn erst dann Ihrem Shell-Profil hinzu, nachdem Sie bestätigt haben, dass er korrekt ist.

Docker Engine deinstallieren

Entfernen Sie Docker-CE-Pakete:

sudo apt purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras

Entfernen Sie Docker-Daten nur, wenn Sie wirklich Images, Container und Volumes löschen möchten:

sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

Entfernen Sie Docker-Repository-Dateien:

sudo rm -f /etc/apt/sources.list.d/docker.sources
sudo rm -f /etc/apt/keyrings/docker.asc

Aktualisieren Sie APT:

sudo apt update

Für Docker Snap:

sudo snap remove docker

Für Ubuntu docker.io:

sudo apt purge docker.io docker-compose-v2

Empfohlener Installationspfad für die meisten Ubuntu-Nutzer

Für die meisten technischen Ubuntu-Nutzer ist dies der saubere Pfad:

sudo apt remove docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc

sudo apt update
sudo apt install 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

sudo tee /etc/apt/sources.list.d/docker.sources > /dev/null <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

sudo apt update

sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

sudo docker run hello-world

Entscheiden Sie dann, ob Sie Gruppenzugriff für Bequemlichkeit oder Rootless Docker für engere Isolation wünschen:

sudo usermod -aG docker $USER
newgrp docker
docker run hello-world

Finale, opinionierte Anleitung

Die Docker-Installation auf Ubuntu ist eine operative Wahl, nicht nur eine Paketwahl. Die Methode, die Sie wählen, beeinflusst Upgrades, Sicherheitsgrenzen und wie nah Ihr Host der Upstream-Docker-Dokumentation entspricht.

Meine praktischen Regeln sind:

  • Verwenden Sie das offizielle APT-Repository von Docker für die meisten Entwickler- und DevOps-Maschinen.
  • Verwenden Sie Ubuntu docker.io, wenn die Konsistenz der Ubuntu-Repositories wichtiger ist als Upstream-Frische.
  • Vermeiden Sie Docker Snap für ernsthafte Container-Workflows, es sei denn, Sie wollen Snap-Verhalten bewusst.
  • Vermeiden Sie das Bequemlichkeitsskript für Produktionshosts.
  • Verwenden Sie modernes docker compose, nicht das alte docker-compose.
  • Behandeln Sie die Gruppe docker als privilegierten Zugriff.
  • Erwägen Sie Rootless Docker, wenn Benutzerisolierung wichtig ist.
  • Fixieren Sie Versionen auf produktionsähnlichen Systemen.
  • Testen Sie das Firewall-Verhalten beim Veröffentlichen von Ports auf Servern.

Die langweiligste Docker-Installation ist normalerweise die beste: Offizielles APT-Repository, explizites Keyring, Compose-Plugin, systemd-Dienst, verstandene Berechtigungen und keine mysteriöse Paketierungsschicht dazwischen. Sobald die Engine am Platz ist, sind Multi-Service-Workloads – einschließlich selbst gehosteter LLM-Stacks – der natürliche nächste Schritt; sehen Sie sich beispielsweise Ollama in Docker Compose für das Ausführen lokaler Modelle in Containern an. Um einen Compose-Stack über Neustarts hinweg auf einem Server am Laufen zu halten, führt Docker Compose als Linux-Dienst mit systemd ausführen durch Unit-Dateien und operationale Gewohnheiten.

Weiterlesen

Abonnieren

Neue Beiträge zu Systemen, Infrastruktur und KI-Engineering.