41

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

4

9 回答 9

28

根据关于 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 参数。

于 2017-05-23T21:16:10.240 回答
26

如果使用 Linux 容器

对我来说,在使用 Docker Desktop 的 Windows 10 上,我无法使用--memory=--cpus=选项。以下是有效的方法:

  1. 右键单击系统托盘中的 Docker 鲸鱼,然后选择“设置”
  2. 转到左侧的“资源->高级”
  3. 在此处设置容器可用的 CPU 和内存数量。

在此处输入图像描述

于 2019-06-13T14:51:31.017 回答
11

惊喜!惊喜!

我的主机上有 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
  • 微软/纳米服务器

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

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

于 2017-05-03T13:58:13.280 回答
6

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

解决方案

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

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

不要忘记--memory在“4096m”中为标志设置的数字附加一个“m”,否则它将无效。内存标志也有一个简短的版本-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

于 2020-01-14T21:25:39.303 回答
4

运行 Docker 快速入门终端

删除默认虚拟机:

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 快速启动终端

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

于 2019-04-29T12:38:55.673 回答
2

使用 WSL2,如此所述,您可以在用户主目录中创建一个 .wlsconfig 文件,从 PowerShell 中键入:

notepad "$env:USERPROFILE/.wslconfig"

并且限制内存的文件内容如下:

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

为了查看您是否使用 WSL2,您可以从 docker 界面执行此操作: 在此处输入图像描述

于 2022-01-04T09:33:53.917 回答
2

我们最近遇到了一个非常相似的问题和疑问,因此在 windows 上用 docker memory 做了一些实验:

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

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

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

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

hyperv - hyper-v 模式;进程是windows server

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

于 2017-06-15T07:33:38.223 回答
0

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

于 2017-04-18T02:37:55.273 回答
-1

没有默认限制。记录在这里

于 2017-04-24T21:17:15.293 回答