Docker Security Tipps helfen dir, Container vom Image-Build bis zum laufenden Dienst abzusichern. Entscheidend sind vertrauenswürdige Images, ein Prozess ohne Root-Rechte und möglichst wenige Berechtigungen. Ergänze das durch kontrollierte Updates, Scans und eine sichere Docker-Daemon-Konfiguration.
Stand: 08.10.2026
Auf einen Blick
- Behandle den Zugriff auf den Docker-Daemon wie administrativen Zugriff auf den Host.
- Nutze nachvollziehbare Images und prüfe sie vor dem Deployment.
- Lass Anwendungen ohne Root laufen und entziehe nicht benötigte Capabilities.
- Begrenze Netzwerk, Mounts und Ressourcen auf das tatsächlich Nötige.
- Baue Scans, Updates und Logs als wiederkehrenden Prozess ein.
Warum sind Docker Security Tipps wichtig?
Container trennen Prozesse mit Namespaces und cgroups. Diese Isolation ist jedoch keine Freigabe für riskante Einstellungen. Ein privilegierter Container, ein eingebundener Docker-Socket oder ein Schreibzugriff auf sensible Host-Pfade kann die Trennung weitgehend aufheben.
Besonders wichtig ist der Docker-Daemon. Wer ihn steuern darf, kann Container mit Host-Mounts starten. Gib daher nur vertrauenswürdigen Administrierenden Zugriff auf den Socket und veröffentliche die Daemon-API nicht ungeschützt im Netzwerk.
Wie prüfst du Images vor dem Einsatz?
Wähle gepflegte Images aus offiziellen oder nachvollziehbaren Quellen. Ein kleines Image kann weniger Komponenten enthalten, ist aber nicht automatisch sicher. Prüfe Herkunft, Aktualität und den Zweck jedes Layers. Für reproduzierbare Deployments solltest du keine unbestimmten Tags wie latest verwenden.
- Lege eine konkrete Version oder, wenn dein Prozess es erlaubt, einen Image-Digest fest.
- Prüfe die Dockerfile und die Release-Hinweise des Upstream-Projekts.
- Scanne das fertige Image vor dem Rollout.
- Aktualisiere Basis-Images regelmäßig und teste das Ergebnis.
docker pull nginx:1.28
docker image inspect nginx:1.28Ein Digest macht den Inhalt eines Deployments eindeutig. Tags bleiben trotzdem praktisch, wenn du sie im Build-Prozess auf einen geprüften Digest auflöst. Mehr zu schlanken und nachvollziehbaren Builds findest du bei Dockerfile Best Practices.
Wie baust du eine Anwendung ohne Root?
Der erste Prozess im Container läuft standardmäßig als Root, wenn das Image keinen anderen Benutzer definiert. Erstelle deshalb im Dockerfile einen eigenen Benutzer, übergib ihm nur benötigte Dateien und setze anschließend USER. So begrenzt du den Schaden, falls die Anwendung kompromittiert wird.
FROM node:22-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
RUN addgroup -S app && adduser -S app -G app && chown -R app:app /app
USER app
CMD ["node", "server.js"]Prüfe zusätzlich, ob die Anwendung Schreibrechte wirklich benötigt. Temporäre Daten kannst du gezielt in ein Volume oder ein beschreibbares Verzeichnis legen. Rootless Mode kann den Docker-Daemon und Containerprozesse als nicht privilegierten Benutzer ausführen. Er reduziert Risiken, ersetzt aber weder sichere Images noch Berechtigungsgrenzen.
Welche Laufzeitoptionen härten einen Container?
Starte nicht mit --privileged, außer ein dokumentierter Sonderfall macht es unvermeidbar. Entziehe stattdessen Capabilities und füge nur eine fachlich erforderliche Capability wieder hinzu. Setze außerdem ein schreibgeschütztes Root-Dateisystem, wenn die App ohne Änderungen am Image-Dateisystem läuft.
docker run --rm -d \
--name web \
--read-only \
--security-opt no-new-privileges:true \
--cap-drop ALL \
--cap-add NET_BIND_SERVICE \
--tmpfs /tmp:rw,noexec,nosuid,size=64m \
-p 127.0.0.1:8080:8080 \
nginx:1.28Dieser Befehl ist ein Ausgangspunkt, kein Rezept für jede Software. Viele Dienste benötigen andere Pfade oder Capabilities. Teste daher zuerst in einer Staging-Umgebung und dokumentiere jede Ausnahme. Docker nutzt standardmäßig ein seccomp-Profil; auf unterstützten Hosts bieten AppArmor oder SELinux zusätzliche Schutzschichten.
| Risiko | Bessere Einstellung | Warum |
|---|---|---|
--privileged | Capabilities gezielt setzen | Der Container erhält nur die nötigen Kernel-Rechte. |
| Port an alle Interfaces binden | 127.0.0.1:PORT:PORT oder Reverse Proxy | Der Dienst ist nicht ungeplant von außen erreichbar. |
| Schreibbarer Host-Mount | Read-only Mount oder benanntes Volume | Host-Dateien bleiben besser geschützt. |
| Docker-Socket im App-Container | Separate, stark begrenzte Automatisierung | Der Socket gewährt weitreichende Kontrolle über Docker. |
Wie sicherst du Netzwerk und Datenzugriffe ab?
Veröffentliche nur Ports, die von außen erreichbar sein müssen. Backend-Dienste können in einem internen Docker-Netzwerk bleiben. Ein Reverse Proxy wie Traefik bündelt öffentliche Zugriffe; die Anleitung für ein lokales Setup findest du unter Traefik im Homelab mit Docker Compose.
Mounts verdienen dieselbe Aufmerksamkeit. Vermeide insbesondere den Mount von /var/run/docker.sock, dem Host-Wurzelverzeichnis und Gerätedateien. Wenn ein Container nur Daten lesen soll, markiere den Bind-Mount als read-only.
docker run --rm \
--mount type=bind,src=/srv/app-config,dst=/app/config,readonly \
example/app:2.4Lege Passwörter und Tokens nicht fest in Images oder in ein Git-Repository. Docker Secrets sind für Swarm gedacht. In Docker Compose kannst du Secrets als Datei bereitstellen; prüfe aber Berechtigungen, Backups und den Zugriff des jeweiligen Dienstes. Ein dedizierter Secret-Manager kann für mehrere Systeme sinnvoll sein.
Wie integrierst du Scans und Updates verlässlich?
Ein Scan ist eine Momentaufnahme. Plane ihn bei jedem Build und wiederhole ihn, wenn neue Schwachstellen bekannt werden. Docker Scout kann Images analysieren; andere Scanner lassen sich ebenso in CI einbinden. Entscheidend ist ein klarer Prozess: Befund bewerten, Update testen und die Korrektur ausrollen.
docker scout cves nginx:1.28
docker scout quickview nginx:1.28Automatische Updates ohne Tests können Ausfälle verursachen. Baue daher ein Staging-Deployment, einen Healthcheck und einen kontrollierten Rollback ein. Wie du einen Healthcheck in Compose definierst, zeigt Docker Healthcheck einrichten.
Welche Kontrollen gehören in den Betrieb?
Überwache Containerzustand, Neustarts, Ressourcenverbrauch und auffällige Logs. Begrenze Speicher und CPU, damit ein fehlerhafter Dienst nicht den ganzen Host ausbremst. Ergänze außerdem Backups und teste die Wiederherstellung, denn Sicherheit umfasst auch Verfügbarkeit.
docker run --rm -d \
--memory=512m \
--cpus=1.0 \
--pids-limit=200 \
--health-cmd='wget -qO- http://localhost:8080/health || exit 1' \
--health-interval=30s \
example/app:2.4Die Healthcheck-Anweisung muss zum Image passen. Verwende nur Werkzeuge, die im Container vorhanden sind, oder implementiere einen kleinen Endpunkt in der Anwendung. Prüfe anschließend Status und Logs regelmäßig statt dich allein auf einen gestarteten Prozess zu verlassen.
Fazit
Docker Security Tipps wirken am besten zusammen: geprüfte Images, ein Nicht-Root-Benutzer, minimale Laufzeitrechte und restriktive Mounts reduzieren die Angriffsfläche deutlich. Sichere außerdem den Daemon-Zugriff und mache Scans, Updates sowie Überwachung zu festen Teilen deines Deployments. So bleibt die Konfiguration nachvollziehbar und im Alltag wartbar.
Quellen
- Docker Docs: Docker Engine security
- Docker Docs: Rootless mode
- Docker Docs: Running containers
- Docker Docs: Building best practices
Häufige Fragen
Docker bietet Isolation durch Namespaces, cgroups und Sicherheitsprofile. Sichere Images, minimale Rechte und ein geschützter Daemon-Zugriff bleiben trotzdem notwendig.
Wer den Docker-Socket steuern kann, kann Container mit weitreichenden Host-Mounts starten. Behandle den Zugriff daher wie administrativen Zugriff auf den Docker-Host.
Wenn die Anwendung es unterstützt, ja. Definiere im Dockerfile einen eigenen Benutzer. Einzelne Sonderfälle müssen dokumentiert und durch weitere Einschränkungen abgesichert werden.
Nein. Rootless Mode reduziert Privilegien des Docker-Daemons und der Container, ersetzt aber keine geprüften Images, Scans, Updates oder restriktiven Mounts.
Scanne bei jedem Build und wiederkehrend für bereits bereitgestellte Images. Bewerte Befunde, teste Updates und rolle Korrekturen kontrolliert aus.





Schreibe einen Kommentar