使用 Docker Desktop for Windows 的docker windows容器是否具有默认内存限制?
我有一个应用程序在容器中运行时崩溃,但当我尝试为--memory 2048mb
命令指定docker run
参数时,它似乎运行正常。至少在以前崩溃的情况下。这给我的印象是存在默认内存限制,但我在文档中找不到它。所以我的问题是内存限制,如果它是在哪里记录?
答案 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
对图像的限制如下:
我认为它来自--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)
对我来说,在使用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=
选项。这是有效的方法:
答案 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镜像。