wake-up-neo.com

Speicherbeschränkung für Docker-Windows-Container

Verfügt der Docker-Windows-Container mit Docker Desktop für Windows über ein Standardspeicherlimit? Ich habe eine Anwendung, die abgestürzt ist, als ich sie im Container ausgeführt habe, aber als ich versucht habe, --memory 2048mb Parameter zum docker run Befehl scheint es gut zu laufen. Zumindest in dem Szenario, in dem es vorher abstürzte. Dies gibt mir den Eindruck, dass es eine Standardspeicherbeschränkung gibt, die ich jedoch in der Dokumentation nicht finden konnte. Also meine Frage gibt es Speicherbegrenzung und ob es ist, wo es dokumentiert ist?

16
Andrey M.

Laut Gesprächen über Docker für Windows Github-Probleme ( https://github.com/moby/moby/issues/31604 ) verwendet Docker für Windows unter Windows 10 tatsächlich einen Hyper -V Isolationsmodell (und Prozessmodell ist in Win 10-Szenario nicht verfügbar).

Bei diesem Isolationstyp wird Ihr Container in einer kompakten VM ausgeführt, die über eine Standardbeschränkung verfügt und 1 GB groß ist. Wenn Sie also mehr Speicher benötigen, sollten Sie -m param verwenden.

17
deafsheep

Überraschung! Überraschung!

Ich habe 32 GB RAM auf meinem Host, kann aber nur 1 GB RAM für Windows-Container anzeigen:

D:\>systeminfo | findstr "Memory"
Total Physical Memory:     1,023 MB
Available Physical Memory: 634 MB
Virtual Memory: Max Size:  1,023 MB
Virtual Memory: Available: 674 MB
Virtual Memory: In Use:    349 MB

D:\>wmic OS get FreePhysicalMemory /Value
FreePhysicalMemory=648340

D:\>wmic computersystem get TotalPhysicalMemory
TotalPhysicalMemory
1072742400

Die gleiche Beschränkung für Bilder aus:

  • Microsoft/windowsservercore
  • Microsoft/Nanoserver

Ich denke, es kommt aus der Hyper-V-Ebene in --isolation=hyperv-Modus, in dem ein Container eine Art schlanke VM ist.

Sie können den für Ihren vorhandenen Container verwendeten Isolationsmodus überprüfen, indem Sie docker inspect Befehl.

7
Ivan

Bei Verwendung eines Linux-Containers

Unter Windows 10 mit Docker Desktop konnte ich das --memory= und --cpus= Optionen zu arbeiten. Folgendes funktioniert:

  1. Klicken Sie mit der rechten Maustaste auf den Docker-Wal in der Taskleiste und wählen Sie "Einstellungen".
  2. Gehen Sie auf der linken Seite zu "Erweitert"
  3. Stellen Sie hier ein, wie viele CPUs und Speicher für Container verfügbar sind.

enter image description here

5

Führen Sie Docker QuickStart Terminal aus

Entfernen Sie die Standard-VM:

docker-machine rm default

Erstellen Sie die Standard-VM neu: Abhängig von Ihren Anforderungen können Sie die Werte für verschiedene Parameter unten ändern.

docker-machine create -d virtualbox --virtualbox-cpu-count=2 --virtualbox-memory=4096 --virtualbox-disk-size=50000 default

Dann mach

docker-machine stop
exit

Öffnen Sie nun das Docker-Schnellstart-Terminal erneut

Wenn Sie jetzt einen neuen Container ausführen und erstellen, wird standardmäßig mehr RAM-Speicher zur Verfügung stehen. Aber seien Sie vorsichtig, es werden bereits alle geladenen Docker-Bilder gelöscht.

1
user3432888

Ich denke, es könnte sein, dass Sie zu viele tote Container haben. Versuchen Sie möglicherweise, docker rm $(docker ps -a -q) zu entfernen, um den gesamten Container zu beenden, und versuchen Sie dann erneut, den gewünschten Container auszuführen.

0
Bill Cheng

Keine Standardlimits. Dokumentiert hier

0
Myles Keating

Wir hatten kürzlich ein sehr ähnliches Problem und eine ähnliche Frage und haben daher einige Experimente mit Docker-Speicher unter Windows durchgeführt:

Es scheint, dass es stark von Ihrer Konfiguration abhängt. Wenn Sie Docker-Container im Hyper-V-Modus ausführen, scheint das Speicherlimit bei 512 MB zu liegen. Sie können den angegebenen Speicher mit der Option "-m" für die Docker-Ausführung erweitern. 2 GB zuzuweisen war kein Problem.

Leider ist es für Windows Server Container völlig anders. Dort ist das anfängliche Speicherlimit 1 GB und Sie können es mit der Option "-m" verringern. Wir haben keine Möglichkeit gefunden, den Speicher für diese Container zu erhöhen.

So sehen Sie Ihre Modus-/Isolationsstufe:

docker info -f "{{ .Isolation }}"

hyperv - Hyper-V-Modus; process ist Windows Server

Einige zusätzliche Hinweise: Es ist sehr schwierig, einen Befehl zu finden, der den verfügbaren Speicher in einem Container ausgibt. Wir hatten unseren eigenen Leistungstest für zuverlässige Ergebnisse erstellt.

0
mugbi