Docker windows容器内存限制

时间:2017-04-17 22:39:13

标签: docker docker-for-windows docker-desktop

使用 Docker Desktop for Windows 的docker windows容器是否具有默认内存限制? 我有一个应用程序在容器中运行时崩溃,但当我尝试为--memory 2048mb命令指定docker run参数时,它似乎运行正常。至少在以前崩溃的情况下。这给我的印象是存在默认内存限制,但我在文档中找不到它。所以我的问题是内存限制,如果它是在哪里记录?

8 个答案:

答案 0 :(得分:15)

根据Docker for Windows Github问题(https://github.com/moby/moby/issues/31604)的讨论,当Docker for Windows在Windows 10下运行时,它实际上使用的是Hyper-V隔离模型(并且在Win 10中无法访问流程模型场景)。

在该隔离类型中,您的容器在轻量级VM中运行,该VM具有默认限制,并且为1 Gb。因此,如果你想拥有更多内存,你应该使用-m param。

答案 1 :(得分:5)

惊喜!惊喜!

我的主机上有32Gb RAM,但我只能看到Windows容器的1Gb RAM:

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

对图像的限制如下:

  • 微软/ windowsservercore
  • 微软/ nanoserver

我认为它来自--isolation=hyperv模式下的Hyper-V层,其中容器是某种轻量级VM。

您可以通过docker inspect命令检查用于现有容器的隔离模式。

答案 2 :(得分:5)

注意:切换到Linux容器并使用“设置资源>高级”选项只能修改用于运行Linux容器的VM资源,而不能修改Windows容器。

解决方案

要调整用于Windows容器的内存和CPU内核的数量,您需要在运行映像时使用--memory--cpus参数标志。例如:

docker run --name myWinImage --memory 4096m --cpus 2 -it -p ‘4096:7880’ --entrypoint powershell

请不要忘记在“ {m}”后面加上为--memory标志设置的数字,例如“ 4096m”,否则它将无效。另外,内存标志的缩写为-m 4096m

测试

您可以通过打开正在运行的容器的 Powershell 终端来验证设置标志​​是否起作用:

要检查内存,请运行:

systeminfo | select-string 'Total Physical Memory'`

要检查CPU,请运行:

Get-WmiObject -class Win32_processor | Format-Table Name,NumberOfCores,NumberOfLogicalProcessors`

这篇文章确实帮助我弄清楚了:https://www.sqlservercentral.com/blogs/default-resource-limits-for-windows-vs-linux-containers-in-docker-desktop

答案 3 :(得分:1)

如果使用Linux容器

对我来说,在使用Docker Desktop的Windows 10上,我无法使用.ngb-dp-day.disabled[_ngcontent-c21], .ngb-dp-day.hidden[_ngcontent-c21] { cursor: default; color: #d0d0d0; pointer-events: none; -webkit-user-select: none; /* Chrome all / Safari all */ -moz-user-select: none; /* Firefox all */ -ms-user-select: none; /* IE 10+ */ user-select: none; /* Likely future */ }--memory=选项。这是有效的方法:

  1. 右键单击系统任务栏中的Docker whale,然后选择“设置”
  2. 转到左侧的“高级”
  3. 在此处设置容器可以使用多少CPU和内存。

enter image description here

答案 4 :(得分:0)

我认为你可能有太多死容器。也许尝试docker rm $(docker ps -a -q)删除所有已退出的容器,然后重试运行所需的容器。

答案 5 :(得分:0)

没有默认限制。记录here

答案 6 :(得分:0)

我们最近遇到了一个非常相似的问题和问题,因此在Windows上对docker内存进行了一些实验:

它似乎在很大程度上取决于您的配置。 如果你运行docker容器,让我们称之为hyper-v模式,内存限制似乎约为512mb。您可以使用“-m”选项扩展给定内存以进行docker run。分配2 gb不是问题。

不幸的是,它与Windows服务器容器完全不同。起始内存限制为1gb,您可以使用“-m”选项减少它。我们没有找到增加这些容器内存的方法。

您如何看待模式/隔离级别:

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

hyperv - hyper-v模式; 进程是Windows服务器

一些附加说明:很难找到输出容器中可用内存的命令。我们已经创建了自己的性能测试,以获得可靠的结果。

答案 7 :(得分:0)

运行Docker QuickStart Terminal

删除默认虚拟机:

docker-machine rm default

重新创建默认虚拟机: 根据您的要求,您可以在下面更改不同参数的值。

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

然后做

docker-machine stop
exit

现在再次打开Docker quickstart终端

现在,当您运行并创建一个新容器时,默认情况下会有更多的内存。 但是要小心,它会删除已经拉出的所有docker镜像。