Zum Inhalt

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:

docker stats --no-stream

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:

cd <app-ordner>

Erstelle vor jeder Änderung eine datierte Kopie der Compose-Datei:

cp compose.yaml "compose.yaml.vor-limits-$(date +%F-%H%M)"

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: 1g ist die harte Obergrenze für den Arbeitsspeicher.
  • mem_reservation: 512m ist eine niedrigere, weiche Zielgrenze bei Speicherdruck.
  • pids_limit: 200 begrenzt 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:

docker compose config

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:

docker compose up -d --force-recreate <dienstname>

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:

docker compose ps

Prüfe außerdem die letzten Protokollzeilen. Ersetze <dienstname> erneut durch den Compose-Dienstnamen:

docker compose logs --tail=100 <dienstname>

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:

docker stats <container-name>

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:

cp <sicherungsdatei> compose.yaml

Prüfe und übernimm danach die alte Konfiguration:

docker compose config
docker compose up -d --force-recreate <dienstname>

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> und docker inspect, ob das RAM-Limit erreicht wurde.
  • Die Anwendung reagiert langsam: Erhöhe zunächst cpus oder mem_limit einzeln 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.