Docker-Container mit CPU- und RAM-Limits absichern¶
Veröffentlicht am 27. August 2026 · Geschätzte Lesezeit: 4 Minuten
Docker-Container dürfen ohne Begrenzung grundsätzlich so viel Arbeitsspeicher und Rechenleistung verwenden, wie der Host bereitstellt. Ein fehlerhafter Dienst kann dadurch andere Anwendungen oder sogar den ganzen Server ausbremsen. Mit passenden Limits in Docker Compose verteilst du die Ressourcen kontrollierter. Plane etwa 20 Minuten für Messung, Änderung und Test ein.
Voraussetzungen
- Ein Linux-Server mit Docker und Docker Compose
- Eine vorhandene Anwendung mit
compose.yaml - Zugriff auf das Terminal und den Anwendungsordner
- Ein aktuelles Backup der Anwendung und ihrer Daten
1. Aktuelle Auslastung messen¶
Zeige zunächst die momentane Auslastung aller laufenden Container an. Führe den Befehl auf dem Docker-Server aus:
Notiere für den gewünschten Container die Werte unter CPU %, MEM USAGE / LIMIT und PIDS. Wiederhole die Messung auch während einer typischen Aufgabe, zum Beispiel eines Backups, Imports oder Medien-Scans.
Warning
Lege ein RAM-Limit nicht knapp oberhalb eines einzelnen Leerlaufwerts fest. Miss unter normaler Last und plane Reserve ein. Ein zu niedriges Limit kann einen Dienst abbrechen oder beschädigte Schreibvorgänge verursachen.
2. Compose-Datei sichern¶
Wechsle in den Ordner der Anwendung. Ersetze <app-ordner> durch den vollständigen Pfad, in dem deine compose.yaml liegt:
Erstelle vor jeder Änderung eine datierte Kopie der Compose-Datei:
Diese Kopie ist dein schneller Rückweg. Sie ersetzt jedoch kein Backup der eingebundenen Datenordner und Datenbanken.
3. Limits in Docker Compose ergänzen¶
Öffne die vorhandene compose.yaml und ergänze die vier hervorgehobenen Eigenschaften direkt im gewünschten Dienst. Das folgende Beispiel zeigt die richtige Einrückung. <vorhandenes-image> ersetzt du durch das bereits verwendete Image; bei einer bestehenden Datei lässt du deine aktuelle image-Zeile unverändert.
services:
app:
image: <vorhandenes-image>
cpus: "1.0"
mem_limit: 1g
mem_reservation: 512m
pids_limit: 200
Die Beispielwerte bedeuten:
cpus: "1.0"begrenzt den Dienst auf die Rechenzeit eines CPU-Kerns.mem_limit: 1gist die harte Obergrenze für den Arbeitsspeicher.mem_reservation: 512mist eine niedrigere, weiche Zielgrenze bei Speicherdruck.pids_limit: 200begrenzt die Anzahl gleichzeitig laufender Prozesse und Threads.
Passe die Werte an deine Messung und den verfügbaren Arbeitsspeicher an. Die Reservierung muss niedriger als das harte RAM-Limit sein.
Tip
Beginne großzügig und senke die Werte später schrittweise. Datenbanken, Fotoverwaltung und Videodienste haben während Wartungsarbeiten oft deutlich höhere Spitzen als im Leerlauf.
4. Compose-Datei prüfen¶
Prüfe im Anwendungsordner, ob Docker Compose die geänderte Datei ohne Fehler lesen kann:
Die Ausgabe zeigt die zusammengeführte Konfiguration. Bei einer Fehlermeldung kontrollierst du besonders Leerzeichen und Einrückung der neuen Zeilen.
5. Container mit den Limits neu erstellen¶
Erstelle den betroffenen Dienst neu. Ersetze <dienstname> durch den Namen unter services, im Beispiel wäre das app:
Der Container wird kurz unterbrochen. Dauerhafte Daten bleiben erhalten, wenn sie korrekt als Volume oder Bind-Mount eingebunden sind.
Zeige danach den Zustand der Anwendung an:
Prüfe außerdem die letzten Protokollzeilen. Ersetze <dienstname> erneut durch den Compose-Dienstnamen:
6. Übernommene Grenzen kontrollieren¶
Zeige die von Docker gesetzten Grenzwerte an. Ersetze <container-name> durch den Namen aus docker compose ps:
docker inspect <container-name> --format 'Memory={{.HostConfig.Memory}} NanoCPUs={{.HostConfig.NanoCpus}} PidsLimit={{.HostConfig.PidsLimit}}'
Docker gibt RAM in Bytes und CPU-Leistung als NanoCPUs aus. Ein Wert von 1000000000 entspricht einem CPU-Kern.
Beobachte den Container anschließend während einer echten Aufgabe:
Beende die laufende Anzeige mit Strg+C. Wenn die Anwendung dauerhaft am Limit arbeitet, sehr langsam wird oder neu startet, erhöhst du die Grenze.
7. Speicherabbrüche erkennen¶
Prüfe, ob Docker den Container wegen Speichermangels beendet hat. Ersetze <container-name> durch den tatsächlichen Namen:
docker inspect <container-name> --format 'OOMKilled={{.State.OOMKilled}} ExitCode={{.State.ExitCode}} RestartCount={{.RestartCount}}'
Bei OOMKilled=true war das RAM-Limit sehr wahrscheinlich zu niedrig. Erhöhe mem_limit, prüfe den Speicherbedarf der Anwendung und erstelle den Dienst erneut.
Danger
Deaktiviere den OOM-Killer nicht. Ohne funktionierende Speicherbegrenzung kann ein einzelner Container den gesamten Host in Speichernot bringen. Limits schützen den Server, ersetzen aber keine Ursachenanalyse bei ungewöhnlich wachsendem Verbrauch.
8. Änderung zurücknehmen¶
Wenn die Anwendung mit den neuen Grenzen nicht zuverlässig läuft, stoppe weitere Tests und kopiere die zuvor angelegte Sicherung wieder auf compose.yaml. Ersetze <sicherungsdatei> durch den vollständigen Namen deiner Kopie:
Prüfe und übernimm danach die alte Konfiguration:
9. Typische Fehler beheben¶
- Compose meldet eine unbekannte Eigenschaft: Aktualisiere das Docker-Compose-Plugin aus der offiziellen Paketquelle deines Systems und prüfe die Schreibweise.
- Der Container startet ständig neu: Kontrolliere mit
docker compose logs --tail=100 <dienstname>unddocker inspect, ob das RAM-Limit erreicht wurde. - Die Anwendung reagiert langsam: Erhöhe zunächst
cpusodermem_limiteinzeln und miss erneut. - Der Host nutzt trotzdem Swap: Ein RAM-Limit und die Swap-Grenze sind verschiedene Einstellungen. Ändere Swap-Regeln nur, wenn du ihre Auswirkungen verstanden und getestet hast.
Grundlage dieser Anleitung sind die aktuellen Docker-Seiten zu Ressourcenbeschränkungen und den Compose-Diensteigenschaften, geprüft am 25. August 2026. Das Video Docker Container Resource Limits: CPU & Memory zeigt das Thema ergänzend in der Praxis.
Fertig¶
Der ausgewählte Container besitzt jetzt nachvollziehbare CPU-, RAM- und Prozessgrenzen. Die Funktionsprüfung ist erfolgreich, wenn docker compose ps einen laufenden Dienst zeigt, docker inspect die gesetzten Werte meldet und die Anwendung auch unter typischer Last ohne Speicherabbruch arbeitet.