Jak przypisać więcej pamięci do kontenera Docker


117

W miarę jak czyta się tytuł, próbuję przypisać więcej pamięci do mojego kontenera. Używam obrazu z centrum Docker o nazwie „aallam / tomcat-mysql”, jeśli jest to istotne.

Kiedy uruchamiam go normalnie bez żadnych specjalnych flag, jest limit pamięci 2 GB (mimo że czytam, że pamięć jest nieograniczona, jeśli nie jest ustawiona)

Oto moje statystyki dokerów

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

Próbowałem ustawić pamięć w ten sposób, ale z tymi samymi rezultatami

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

Czytałem, że być może maszyna wirtualna jest tym, co ją ogranicza. Ale w takim razie dlaczego statystyki dockera pokazują, że limit rozmiaru kontenera wynosi 2 GB?

Odpowiedzi:


203

Widoczny 2GBlimit to całkowita pamięć maszyny wirtualnej, na której działa docker.

Jeśli korzystasz z docker-for-windows lub docker-for-mac, możesz łatwo zwiększyć go za pomocą ikony Whale 🐳 na pasku zadań, a następnie przejdź do Preferencje -> Zaawansowane:

Preferencje Dockera

Ale jeśli używasz VirtualBox w tyle, otwórz VirtualBox, wybierz i skonfiguruj pamięć przypisaną do docker-machine.

Zobacz to dla Maca:

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

PAMIĘĆ Domyślnie Docker for Mac korzysta z 2 GB pamięci wykonawczej przydzielonej z całkowitej dostępnej pamięci na komputerze Mac. Możesz zwiększyć ilość pamięci RAM w aplikacji, aby uzyskać szybszą wydajność, ustawiając tę ​​liczbę wyższą (na przykład na 3) lub niższą (na 1), jeśli chcesz, aby Docker dla komputerów Mac zużywał mniej pamięci.

Dla Windowsa:

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

Pamięć - zmień ilość pamięci używanej przez platformę Docker dla maszyny wirtualnej z systemem Windows Linux


72
Jak to zrobić bez GUI?
— Philippe

13
@Philippe, jaki jest Twój przypadek użycia? Docker dla Windows lub Docker dla Mac jest dostarczany z guli. Myślę, że twoja sprawa ma natywny docker na Linuksie (bez żadnej maszyny wirtualnej, co ma miejsce w przypadku systemów produkcyjnych / chmury). W takich przypadkach nie musisz konfigurować pamięci maszyny wirtualnej, ponieważ docker ma maszynę do otworów do swoich zastosowań.
— Robert

10
Tak, odkryłem to później. Więc jeśli chcę, aby mój kontener Docker miał> 4 GB pamięci RAM, nie muszę nic robić, jeśli programuję w systemie Linux?
— Philippe

3
Nie jest to możliwe, głównie dlatego, że nie przypisujesz pamięci do kontenerów docker, zamiast tego ograniczasz ilość pamięci, z której może korzystać kontener. Zwróć uwagę, że obecna odpowiedź nie dotyczy przypisywania pamięci do kontenerów, ale przypisywania pamięci do maszyny wirtualnej, na której działa docker.
— Robert

2
@SiddharthPant, docker działający bezpośrednio na Linuksie będzie wykorzystywał tyle pamięci, ile jest dostępne, dlatego nie ma ograniczeń innych niż fizyczne.
— Robert

21

Przydziel maksymalną pamięć do maszyny docker z (preferencje dockera -> zaawansowane)

Zrzut ekranu ustawień zaawansowanych: Zrzut ekranu ustawień zaawansowanych.

Spowoduje to ustawienie maksymalnego limitu wykorzystania platformy docker podczas uruchamiania kontenerów. Teraz uruchom obraz w nowym pojemniku z flagą -m = 4g na 4 gigabajty pamięci RAM lub więcej. na przykład

docker run -m=4g {imageID}

Pamiętaj, aby zastosować zmiany zwiększania limitu pamięci RAM. Zrestartuj docker i dwukrotnie sprawdź, czy limit pamięci RAM wzrósł. Może to być jeden z powodów, dla których nie widać wzrostu limitu pamięci RAM w kontenerach docker.


17

Jeśli chcesz zmienić domyślny kontener i korzystasz z Virtualbox, możesz to zrobić za pomocą wiersza poleceń / CLI:

docker-machine stop
VBoxManage modifyvm default --cpus 2
VBoxManage modifyvm default --memory 4096
docker-machine start
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.