Docker windows容器内存限制

And*_* M. 17 docker docker-for-windows docker-desktop

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

nes*_*.gp 25

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

notepad "$env:USERPROFILE/.wslconfig"
Run Code Online (Sandbox Code Playgroud)

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

[wsl2]
memory=3GB   # Limits VM memory in WSL 2 up to 3GB
Run Code Online (Sandbox Code Playgroud)

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

  • 谢谢。这对我有用。我必须重新启动计算机才能使其生效。 (4认同)

dea*_*eep 17

根据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.

  • 但是在使用docker-compose时如何设置此内存限制? (4认同)
  • @Divisadero 是的添加这个 `mem_limit: 4096m` (3认同)
  • 我有一个类似的问题,但是 docker 的上限为 1.943GiB(根据 `docker stats`),即使我指定更多内存(使用 `-m`) (2认同)

Iva*_*van 7

惊喜!惊喜!

我的主机上有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
Run Code Online (Sandbox Code Playgroud)

对以下图片制作的图片有相同的限制:

  • 微软/ windowsservercore
  • 微软/纳米服务器

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

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


b01*_*b01 6

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

解决方案

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

docker run --name myWinImage --memory 4096m --cpus 2 -it -p ‘4096:7880’ --entrypoint powershell
Run Code Online (Sandbox Code Playgroud)

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

测试

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

要检查内存,请运行:

systeminfo | select-string 'Total Physical Memory'`
Run Code Online (Sandbox Code Playgroud)

要检查 CPU,请运行:

Get-WmiObject -class Win32_processor | Format-Table Name,NumberOfCores,NumberOfLogicalProcessors`
Run Code Online (Sandbox Code Playgroud)

这篇文章真的帮我弄明白了:https : //www.sqlservercentral.com/blogs/default-resource-limits-for-windows-vs-linux-containers-in-docker-desktop


Rya*_*ton 5

如果使用Linux容器

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

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

在此处输入图片说明

  • 这些设置适用于 Docker 在 Linux 模式下运行时的情况,该模式使用完整的 hyper-v 虚拟机。如果切换到 Windows 模式,这些设置就会消失。 (6认同)
  • 旁注:这些设置也会在 WSL2 模式下消失。但它确实告诉您如何配置它们。 (3认同)