Ratgeber/Docker braucht zu viel Speicher

Docker braucht zu viel Speicher auf dem Mac? So findest du den Container und begrenzt ihn

Atta 🐬

Gründer, Vitals

Veröffentlicht

Kurze Antwort

Auf einem Mac führt Docker alle Container in einer einzigen virtuellen Linux-Maschine aus, deshalb zeigt die Aktivitätsanzeige einen einzigen großen Prozess, meist „Virtual Machine Service for Docker“, und nicht die Container. Um zu sehen, welcher Container den Speicher nutzt, führe docker stats aus. Um die Summe zu begrenzen, senke „Memory limit“ in Docker Desktop unter „Settings“ → „Resources“ → „Advanced“; standardmäßig ist es die Hälfte des Speichers deines Mac. „Resource Saver“ an derselben Stelle schaltet die virtuelle Maschine aus, wenn Docker Desktop nichts zu tun hat. Vitals, ein Systemmonitor für den Mac, zeigt Speicher, CPU, Netzwerk und Ports jedes Containers im Tab „Container“ und stoppt einen Container direkt aus der Menüleiste.

So findest und begrenzt du den Speicher von Docker

  1. 01 Öffne die Aktivitätsanzeige, klicke auf „Speicher“ und tippe „Docker“ ins Suchfeld. Die größte Zeile ist die virtuelle Maschine, die deine Container ausführt; mit Apples Virtualization-Framework heißt sie „Virtual Machine Service for Docker“. com.docker.backend ist Docker Desktop selbst.
  2. 02 Führe im Terminal docker stats --no-stream aus. Jede Zeile ist ein laufender Container, und MEM USAGE / LIMIT zeigt, was er nutzt und wie viel er höchstens nutzen darf.
  3. 03 Stoppe, was du nicht nutzt: docker stop gefolgt vom Namen des Containers oder docker compose down im Ordner eines Compose-Projekts.
  4. 04 Öffne in Docker Desktop „Settings“ → „Resources“ → „Advanced“ und senke „Memory limit“ auf etwas mehr als das, was docker stats zu deinen aktivsten Zeiten zeigt. Übernimm die Änderung; Docker Desktop startet die virtuelle Maschine neu.
  5. 05 Schalte im selben Bereich „Resource Saver“ ein, damit die virtuelle Maschine herunterfährt, solange keine Container laufen.

OrbStack, Colima, Rancher Desktop und Podman führen Container ebenfalls in einer virtuellen Maschine aus, jede mit einer eigenen Speichereinstellung. Bei Colima gibt colima start --memory 4 der virtuellen Maschine 4 GB.

Container sind eine Linux-Funktion, deshalb führt auf einem Mac jede Engine sie in einer kleinen virtuellen Linux-Maschine aus. macOS sieht diese Maschine als einen Prozess und hat keine Ahnung, welcher Container darin was nutzt. Deshalb zeigt die Aktivitätsanzeige einen Prozess mit mehreren Gigabyte und gar keine Container, und deshalb stehen die Antworten in Dockers eigenen Werkzeugen. Die Tabelle unten sagt zu allem, was du siehst, was es ist und was du tun kannst.

Wohin der Speicher von Docker geht

Was du siehstWas es istWas du tun kannst
„Virtual Machine Service for Docker“, mehrere GB Die virtuelle Linux-Maschine, die alle Container ausführt „Memory limit“ unter „Settings“ → „Resources“ → „Advanced“ senken
com.docker.backend Der eigene Prozess von Docker Desktop Meist klein; Docker Desktop neu starten, wenn er immer weiter wächst
Der Speicher bleibt hoch, obwohl keine Container laufen Die virtuelle Maschine hält noch Speicher, den sie genutzt hat „Resource Saver“ einschalten oder Docker Desktop beenden
Ein Container nahe an seinem Limit Er braucht mehr oder hat ein Leck docker stats und ein Limit pro Container
Der Speicher steigt beim Bauen von Images Builds laufen in derselben virtuellen Maschine Normal; er sinkt, wenn der Build fertig ist

Warum die Aktivitätsanzeige einen großen Docker-Prozess zeigt

Die virtuelle Maschine bekommt ihren Speicher von macOS wie jede App, bis zu dem „Memory limit“, das du festlegst. Darin verteilt Linux diesen Speicher auf deine Container und nutzt den Rest als Dateicache, so wie macOS. Von außen sieht alles gleich aus: ein Prozess, der viel Speicher belegt.

Nur die Engine kennt die Aufteilung, und genau danach fragt docker stats. Die Spalte CPU % dort ist ein Anteil an den CPUs der virtuellen Maschine, und MEM % ist ein Anteil am Limit des Containers oder, wenn er keines hat, an der ganzen virtuellen Maschine.

Wie viel Speicher du Docker geben solltest

Docker Desktop nimmt standardmäßig die Hälfte des Speichers deines Mac: 8 GB auf einem Mac mit 16 GB. Ein typischer Entwicklungs-Stack aus App-Server, Datenbank und Cache braucht meist weit weniger. Lass deinen Stack wie gewohnt laufen, beobachte die Summe in docker stats zu den aktivsten Zeiten und stelle „Memory limit“ etwas darüber ein.

Stellst du es zu niedrig ein, stoppt Linux in der virtuellen Maschine Container, denen der Speicher ausgeht. Führe docker inspect --format '{{.State.OOMKilled}}' gefolgt vom Namen eines Containers aus: Es gibt true aus, wenn das passiert ist. Erhöhe das Limit oder gib diesem Container ein eigenes Limit, damit er die anderen nicht mitreißen kann.

Ein Speicherlimit pro Container festlegen

Ein Limit für einen Container verhindert, dass ein Dienst mit Speicherleck die virtuelle Maschine füllt. Füge bei docker run die Option --memory 512m hinzu. In einer Compose-Datei setze mem_limit: 512m beim Dienst. Der Container wird gestoppt, wenn er darüber geht, und docker stats zeigt das Limit neben seiner Nutzung.

Warum Docker keinen Speicher zurückgibt

Container zu stoppen gibt Speicher in der virtuellen Maschine frei, aber die Maschine gibt ihn nicht immer gleich an macOS zurück, deshalb kann ihr Wert in der Aktivitätsanzeige hoch bleiben. „Resource Saver“ gibt alles zurück, indem es die Maschine ausschaltet, wenn Docker Desktop nichts zu tun hat, und sie startet in ein paar Sekunden wieder, wenn ein Container sie braucht. Docker Desktop zu beenden hat dieselbe Wirkung.

Docker und Festplattenplatz

Images, gestoppte Container, Volumes und der Build-Cache liegen in einem Disk-Image, das beim Arbeiten wächst, und auf einem Mac wird es unter Systemdaten gezählt. docker system df zeigt, wie viel jede Art belegt. docker system prune entfernt gestoppte Container, ungenutzte Netzwerke, verwaiste Images und den Build-Cache; füge --volumes nur hinzu, wenn du sicher bist, dass kein Volume Daten enthält, die du brauchst. „Disk usage limit“ neben „Memory limit“ in den Einstellungen von Docker Desktop begrenzt es.

Was Vitals ergänzt

Vitals zeigt, was die virtuelle Maschine macOS nicht verrät: den Speicher jedes Containers.

  • Ein Tab „Container“ mit Speicher, CPU, Netzwerk, Festplatte und veröffentlichten Ports für jeden Container, Compose-Projekte zusammen gruppiert
  • Karten für den größten Container und den, der seinem Limit am nächsten ist, und ein Diagramm des Speichers nach Container
  • Docker Desktop ist eine Zeile in der App-Liste, die virtuelle Maschine eingerechnet; klicke darauf, um die Container darin zu sehen
  • Die Container auch im Menü in der Menüleiste, wo ein Klick einen Container nach einer Rückfrage stoppt. Siehe Docker-Container stoppen
  • Docker Desktop, OrbStack, Colima, Rancher Desktop und Podman

Gut zu wissen

  • Vitals liest die Werte der Container von der Engine und startet oder entfernt nie Container. Stoppen ist die einzige Änderung, die es vornimmt, und nur, wenn du es willst.
  • Der Tab erscheint, solange eine Engine läuft.
Vitals kaufen für $9 $9 zur Einführung, danach $29. 14 Tage Geld zurück.

Häufige Fragen

Warum braucht Docker auf meinem Mac so viel Speicher?

Docker führt Container in einer virtuellen Linux-Maschine aus, die bis zu ihrem „Memory limit“ belegt, standardmäßig die Hälfte des Speichers deines Mac. Senke „Memory limit“ unter „Settings“ → „Resources“ → „Advanced“ und führe docker stats aus, um zu sehen, welcher Container am meisten nutzt.

Was ist „Virtual Machine Service for Docker“?

Die virtuelle Maschine, in der Docker Desktop deine Container ausführt, wenn es Apples Virtualization-Framework nutzt. Ihr Speicher ist alles, was die Container und Linux darin nutzen, bis zum „Memory limit“ von Docker Desktop.

Wie begrenze ich den Speicher von Docker auf dem Mac?

Öffne in Docker Desktop „Settings“ → „Resources“ → „Advanced“ und senke „Memory limit“. Für einen einzelnen Container nutze docker run --memory 512m oder mem_limit: 512m in einer Compose-Datei.

Warum gibt Docker keinen Speicher zurück, nachdem ich Container gestoppt habe?

Die virtuelle Maschine behält einen Teil des Speichers, den sie genutzt hat, auch nachdem Container gestoppt sind. Schalte „Resource Saver“ ein, das die Maschine ausschaltet, wenn Docker Desktop nichts zu tun hat, oder beende Docker Desktop.

Warum braucht „Virtual Machine Service for Docker“ so viel CPU?

Meist ist ein Container beschäftigt, und docker stats zeigt, welcher. Bleibt die CPU-Last hoch, obwohl keine Container laufen, beende Docker Desktop, öffne es neu und aktualisiere es: Hohe CPU-Last ohne laufende Container wurde bei manchen Versionen von Docker Desktop als Fehler gemeldet.

Wie viel Speicher sollte ich Docker auf dem Mac geben?

Etwas mehr, als deine Container zu ihren aktivsten Zeiten nutzen, was docker stats zeigt. Für einen typischen Entwicklungs-Stack sind das oft 2 bis 4 GB, deutlich weniger als der Standard von der Hälfte des Mac-Speichers.

Gibt es eine App, die den Speicher von Docker-Containern auf dem Mac zeigt?

Vitals hat einen Tab „Container“ mit Speicher, CPU, Netzwerk, Festplatte und Ports jedes Containers, für Docker Desktop, OrbStack, Colima, Rancher Desktop und Podman. Außerdem stoppt es einen Container direkt aus der Menüleiste, nach einer Rückfrage.

Im Glossar

Weitere Ratgeber