So weisen Sie dem Docker-Container mehr Speicher zu

116

Während der Titel lautet, versuche ich, meinem Container mehr Speicher zuzuweisen. Ich verwende ein Image vom Docker-Hub mit dem Namen "aallam / tomcat-mysql", falls dies relevant ist.

Wenn ich es normal ohne spezielle Flags starte, gibt es ein Speicherlimit von 2 GB (obwohl ich gelesen habe, dass der Speicher unbegrenzt ist, wenn er nicht gesetzt ist).

Hier sind meine Docker-Statistiken

CONTAINER           CPU %               MEM USAGE / LIMIT       MEM %               NET I/O             BLOCK I/O           PIDS
ba57d6c9e9d2        0.22%               145.6 MiB / 1.952 GiB   7.29%               508 B / 508 B       0 B / 6.91 MB       68

Ich habe versucht, den Speicher explizit so einzustellen, aber mit den gleichen Ergebnissen

docker run -d --memory=10g --memory-swap=-1 -e MYSQL_PASSWORD=password -p 3307:3306 -p 8081:8080 aallam/tomcat-mysql

Ich habe gelesen, dass die VM sie möglicherweise einschränkt. Aber warum zeigen Docker-Statistiken dann, dass die maximale Containergröße 2 GB beträgt?

Kane
quelle

Antworten:

202

Diese 2GBGrenze ist der Gesamtspeicher der VM, auf der Docker ausgeführt wird.

Wenn Sie Docker-for-Windows oder Docker-for-Mac verwenden, können Sie es einfach über das Whale 🐳 -Symbol in der Taskleiste erhöhen und dann zu Einstellungen -> Erweitert:

Docker-Einstellungen

Wenn Sie jedoch VirtualBox verwenden, öffnen Sie VirtualBox, wählen Sie den vom Docker-Computer zugewiesenen Speicher aus und konfigurieren Sie ihn.

Siehe dies für Mac:

https://docs.docker.com/docker-for-mac/#memory

SPEICHER Standardmäßig verwendet Docker für Mac 2 GB Laufzeitspeicher, der aus dem insgesamt verfügbaren Speicher Ihres Mac zugewiesen wird. Sie können den Arbeitsspeicher der App erhöhen, um eine schnellere Leistung zu erzielen, indem Sie diese Zahl höher (z. B. auf 3) oder niedriger (auf 1) einstellen, wenn Docker für Mac weniger Speicher benötigt.

Für Windows:

https://docs.docker.com/docker-for-windows/#advanced

Speicher - Ändern Sie die Speichermenge, die Docker für Windows Linux VM verwendet

Robert
quelle
72
Wie machst du das ohne die GUI?
Philippe
13
@Philippe, was ist dein Anwendungsfall? Docker für Windows oder Docker für Mac wird mit guli geliefert. Ich denke, dass Ihr Fall natives Docker über Linux hat (ohne virtuelle Maschine, was bei Produktionssystemen / Cloud der Fall ist). In solchen Fällen müssen Sie den VM-Speicher nicht einrichten, da Docker den Hole Machine für seine Zwecke hat.
Robert
10
Ja, das habe ich später herausgefunden. Wenn ich also möchte, dass mein Docker-Container> 4 GB RAM hat, muss ich nichts tun, wenn ich unter Linux entwickle?
Philippe
3
Dies ist nicht möglich, hauptsächlich weil Sie Docker-Containern keinen Speicher zuweisen, sondern die Speicherkapazität eines Containers begrenzen . Beachten Sie, dass es in der vorliegenden Antwort nicht darum geht, Containern Speicher zuzuweisen, sondern der virtuellen Maschine, in der Docker ausgeführt wird, Speicher zuzuweisen.
Robert
2
@SiddharthPant, Docker, der direkt auf einer Linux-Box ausgeführt wird, verwendet so viel Speicher, wie verfügbar ist. Daher gibt es keine andere Beschränkung als die physische.
Robert
20

Weisen Sie Ihrem Docker-Computer den maximalen Speicher zu (Docker-Präferenz -> Voraus)

Screenshot der Voreinstellungen: Screenshot der Voreinstellungen.

Dadurch wird das maximale Limit festgelegt, das Docker beim Ausführen von Containern verbrauchen. Führen Sie nun Ihr Bild in einem neuen Container mit dem Flag -m = 4g für 4 Gigs RAM oder mehr aus. z.B

docker run -m=4g {imageID}

Denken Sie daran, die Änderungen zur Erhöhung der RAM-Grenze anzuwenden. Starten Sie den Docker neu und überprüfen Sie, ob das RAM-Limit erhöht wurde. Dies kann einer der Faktoren sein, bei denen die RAM-Grenze in Docker-Containern nicht erhöht wird.

Marktwarteschlange
quelle
17

Wenn Sie den Standardcontainer ändern möchten und Virtualbox verwenden, können Sie dies über die Befehlszeile / CLI tun:

docker-machine stop
VBoxManage modifyvm default --cpus 2
VBoxManage modifyvm default --memory 4096
docker-machine start
alles zerstören
quelle