Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Docker windows container memory limit

Does docker windows containers, with Docker Desktop for Windows, have default memory limit? I have an application that was crashing when I run it in the container, but when I tried to specify --memory 2048mb parameter to the docker run command it seems to run fine. At least in the scenario where it was crashing before. This gives me impression that there is default memory limit, but I could not find it in the documentation. So my question is there memory limit and if it is where it is documented?

like image 588
Andrey M. Avatar asked Apr 17 '17 22:04

Andrey M.


People also ask

Do Docker containers have a memory limit?

The maximum amount of memory the container can use. If you set this option, the minimum allowed value is 6m (6 megabytes). That is, you must set the value to at least 6 megabytes.

How do I limit memory on Windows Docker?

To limit the maximum amount of memory usage for a container, add the --memory option to the docker run command. Alternatively, you can use the shortcut -m . Within the command, specify how much memory you want to dedicate to that specific container.

What is the maximum limit of Docker container?

In the current Docker version, there is a default limitation on the Docker container storage of 10Gb.

What happens when Docker container Hits memory limit?

The --memory parameter limits the container memory usage, and Docker will kill the container if the container tries to use more than the limited memory.


4 Answers

According to talks on Docker for windows Github issues (https://github.com/moby/moby/issues/31604), when Docker for Windows is run under Windows 10, it is actually using a Hyper-V isolation model (and process model is not accessible in Win 10 scenario).

And in that isolation type, your container is run inside a lightweight VM, which DOES have a default limit, and it is 1 Gb. So if you want to have more memory you should use -m param.

like image 146
deafsheep Avatar answered Sep 18 '22 13:09

deafsheep


If using a Linux container

For me, on Windows 10 using Docker Desktop, I could not get the --memory= and --cpus= options to work. Here's what does work:

  1. Right click on the Docker whale in the system tray and choose "Settings"
  2. Go to "Resources -> Advanced" on the left
  3. Set how many CPUs and memory is available to containers here.

enter image description here

like image 44
Ryan Shillington Avatar answered Sep 17 '22 13:09

Ryan Shillington


With WSL2, as documented here, you can create a .wlsconfig file in your user home directory, type from the PowerShell:

notepad "$env:USERPROFILE/.wslconfig"

And the contents of the file to limit memory are the following:

[wsl2]
memory=3GB   # Limits VM memory in WSL 2 up to 3GB

In order to see if you are using WSL2 you can do so from the docker interface: enter image description here

like image 26
nessa.gp Avatar answered Sep 19 '22 13:09

nessa.gp


Surprise! Surprise!

I have 32Gb RAM on my host but I can see only 1Gb RAM given to Windows containers:

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

The same limit on images made from:

  • microsoft/windowsservercore
  • microsoft/nanoserver

I think it's coming from the Hyper-V layer in --isolation=hyperv mode, where a container is some sort of lightweight VM.

You can check isolation mode used for your existing container by docker inspect command.

like image 25
Ivan Avatar answered Sep 18 '22 13:09

Ivan