Docker windows 容器内存限制
Docker windows container memory limit
dockerwindows 容器,Docker 桌面 Windows,是否有默认内存限制?
当我在容器中 运行 时,我有一个应用程序崩溃了,但是当我尝试为 docker run
命令指定 --memory 2048mb
参数时,它似乎 运行 正常。至少在之前崩溃的情况下。这给我的印象是有默认内存限制,但我在文档中找不到它。所以我的问题是有内存限制吗?是否有记录?
我想可能是你的死容器太多了。也许尝试 docker rm $(docker ps -a -q)
删除所有退出的容器,然后重试 运行 您想要的容器。
没有默认限制。已记录 here
惊喜!惊喜!
我的主机上有 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
对来自以下来源的图像的相同限制:
- microsoft/windowsservercore
- microsoft/nanoserver
我认为它来自 --isolation=hyperv
模式下的 Hyper-V 层,其中容器是某种轻量级 VM。
您可以通过 docker inspect
命令检查现有容器使用的隔离模式。
根据关于 Docker for windows Github issues (https://github.com/moby/moby/issues/31604) 的讨论,当 Docker for Windows 是 运行在Windows10下,其实是使用了Hyper-V隔离模型(而且进程模型在Win 10场景下是访问不到的)。
并且在该隔离类型中,您的容器 运行 位于轻量级 VM 中,它确实有默认限制,即 1 Gb。所以如果你想拥有更多内存,你应该使用 -m 参数。
我们最近有一个非常相似的问题和问题,因此在 windows 上用 docker 内存做了一些实验:
看来这在很大程度上取决于您的配置。
如果你 运行 docker 容器,让我们称之为 hyper-v 模式,内存限制似乎是大约 512mb。您可以使用 docker 运行 的“-m”选项扩展给定的内存。分配 2 GB 不是问题。
不幸的是,windows 服务器容器完全不同。起始内存限制为 1gb,您可以使用“-m”选项减少它。我们没有找到增加这些容器内存的方法。
您如何看待自己的 mode/isolation 水平:
docker info -f "{{ .Isolation }}"
hyperv - hyper-v 模式; 进程是windows服务器
一些附加说明:很难找到一个命令来输出容器中的可用内存。我们已经创建了自己的性能测试以获得可靠的结果。
运行 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 个图像。
如果使用 Linux 容器
对我来说,在 Windows 10 上使用 Docker 桌面,我无法使用 --memory=
和 --cpus=
选项。这是有效的方法:
- 右键单击系统托盘中的 Docker whale 并选择“设置”
- 转到左侧的“资源 -> 高级”
- 在此处设置容器可用的 CPU 和内存数量。
注意:切换到 Linux 容器并使用 "Settings Resources > Advanced" 选项只会修改 运行ning [=45] 的 VM 资源=] 个容器,而不是 Windows 个容器。
解决方案
要调整用于 Windows 容器的内存和 CPU 内核数量,您需要在 [=47] 时使用 --memory
和 --cpus
参数标志=] 图片。例如:
docker run --name myWinImage --memory 4096m --cpus 2 -it -p ‘4096:7880’ --entrypoint powershell
不要忘记附加一个 "m" 和您为 --memory
标志设置的数字,如“4096m”,否则它将无效。内存标志也有一个短版本 -m 4096m
.
测试
您可以通过打开 Powershell 终端到 运行ning 容器来验证设置标志是否有效:
检查内存,运行:
systeminfo | select-string 'Total Physical Memory'`
检查CPUs,运行:
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
使用 WSL2,如 here 所述,您可以在用户主目录中创建一个 .wlsconfig 文件,从 PowerShell 中键入:
notepad "$env:USERPROFILE/.wslconfig"
而限制内存的文件内容如下:
[wsl2]
memory=3GB # Limits VM memory in WSL 2 up to 3GB
为了查看您是否在使用 WSL2,您可以从 docker 界面执行此操作:
您还可以通过编辑 json 文件 C:\Users\Personal\AppData\Roaming\Docker\settings.json 来设置 docker 使用的内存。查找名为 MemoryMiB 的 属性 并将其值更新为您希望 docker 安装使用的兆字节数。
dockerwindows 容器,Docker 桌面 Windows,是否有默认内存限制?
当我在容器中 运行 时,我有一个应用程序崩溃了,但是当我尝试为 docker run
命令指定 --memory 2048mb
参数时,它似乎 运行 正常。至少在之前崩溃的情况下。这给我的印象是有默认内存限制,但我在文档中找不到它。所以我的问题是有内存限制吗?是否有记录?
我想可能是你的死容器太多了。也许尝试 docker rm $(docker ps -a -q)
删除所有退出的容器,然后重试 运行 您想要的容器。
没有默认限制。已记录 here
惊喜!惊喜!
我的主机上有 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
对来自以下来源的图像的相同限制:
- microsoft/windowsservercore
- microsoft/nanoserver
我认为它来自 --isolation=hyperv
模式下的 Hyper-V 层,其中容器是某种轻量级 VM。
您可以通过 docker inspect
命令检查现有容器使用的隔离模式。
根据关于 Docker for windows Github issues (https://github.com/moby/moby/issues/31604) 的讨论,当 Docker for Windows 是 运行在Windows10下,其实是使用了Hyper-V隔离模型(而且进程模型在Win 10场景下是访问不到的)。
并且在该隔离类型中,您的容器 运行 位于轻量级 VM 中,它确实有默认限制,即 1 Gb。所以如果你想拥有更多内存,你应该使用 -m 参数。
我们最近有一个非常相似的问题和问题,因此在 windows 上用 docker 内存做了一些实验:
看来这在很大程度上取决于您的配置。 如果你 运行 docker 容器,让我们称之为 hyper-v 模式,内存限制似乎是大约 512mb。您可以使用 docker 运行 的“-m”选项扩展给定的内存。分配 2 GB 不是问题。
不幸的是,windows 服务器容器完全不同。起始内存限制为 1gb,您可以使用“-m”选项减少它。我们没有找到增加这些容器内存的方法。
您如何看待自己的 mode/isolation 水平:
docker info -f "{{ .Isolation }}"
hyperv - hyper-v 模式; 进程是windows服务器
一些附加说明:很难找到一个命令来输出容器中的可用内存。我们已经创建了自己的性能测试以获得可靠的结果。
运行 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 个图像。
如果使用 Linux 容器
对我来说,在 Windows 10 上使用 Docker 桌面,我无法使用 --memory=
和 --cpus=
选项。这是有效的方法:
- 右键单击系统托盘中的 Docker whale 并选择“设置”
- 转到左侧的“资源 -> 高级”
- 在此处设置容器可用的 CPU 和内存数量。
注意:切换到 Linux 容器并使用 "Settings Resources > Advanced" 选项只会修改 运行ning [=45] 的 VM 资源=] 个容器,而不是 Windows 个容器。
解决方案
要调整用于 Windows 容器的内存和 CPU 内核数量,您需要在 [=47] 时使用 --memory
和 --cpus
参数标志=] 图片。例如:
docker run --name myWinImage --memory 4096m --cpus 2 -it -p ‘4096:7880’ --entrypoint powershell
不要忘记附加一个 "m" 和您为 --memory
标志设置的数字,如“4096m”,否则它将无效。内存标志也有一个短版本 -m 4096m
.
测试
您可以通过打开 Powershell 终端到 运行ning 容器来验证设置标志是否有效:
检查内存,运行:
systeminfo | select-string 'Total Physical Memory'`
检查CPUs,运行:
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
使用 WSL2,如 here 所述,您可以在用户主目录中创建一个 .wlsconfig 文件,从 PowerShell 中键入:
notepad "$env:USERPROFILE/.wslconfig"
而限制内存的文件内容如下:
[wsl2]
memory=3GB # Limits VM memory in WSL 2 up to 3GB
为了查看您是否在使用 WSL2,您可以从 docker 界面执行此操作:
您还可以通过编辑 json 文件 C:\Users\Personal\AppData\Roaming\Docker\settings.json 来设置 docker 使用的内存。查找名为 MemoryMiB 的 属性 并将其值更新为您希望 docker 安装使用的兆字节数。