使用Docker Desktop for Windows的docker windows容器是否具有默认内存限制?我有一个应用程序,当我在容器中运行时崩溃,但当我尝试将--memory 2048mb
参数指定为docker run
命令时,它似乎运行正常。至少在以前崩溃的情况下。这给我的印象是存在默认内存限制,但我在文档中找不到它。所以我的问题是内存限制,如果它是记录的位置?
根据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。
惊喜!惊喜!
我的主机上有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
命令检查用于现有容器的隔离模式。
我想可能是你有太多死容器。也许尝试docker rm $(docker ps -a -q)
删除所有已退出的容器,然后重试运行您想要的容器。
没有默认限制。记录的here
我们最近有一个非常相似的问题和问题,因此在Windows上对docker内存进行了一些实验:
它似乎在很大程度上取决于您的配置。如果你运行docker容器,让我们称之为hyper-v模式,内存限制似乎约为512mb。您可以使用“-m”选项扩展给定内存以进行docker run。分配2 GB不是问题。
不幸的是,它与Windows服务器容器完全不同。起始内存限制为1gb,您可以使用“-m”选项减少它。我们没有找到增加这些容器内存的方法。
您如何看待模式/隔离级别:
docker info -f "{{ .Isolation }}"
hyperv - hyper-v模式;进程是Windows服务器
一些附加说明:很难找到输出容器中可用内存的命令。我们创建了自己的性能测试,以获得可靠的结果。
运行Docker QuickStart终端
删除默认的vm:
docker-machine rm default
重新创建默认vm:根据您的要求,您可以更改以下不同参数的值。
docker-machine create -d virtualbox --virtualbox-cpu-count=2 --virtualbox-memory=4096 --virtualbox-disk-size=50000 default
然后做
docker-machine stop
exit
现在再次打开Docker快速启动终端
现在,当您运行并创建一个新容器时,默认情况下将有更多ram内存。但要小心它将删除所有拉出的docker图像。