在 Windows 中移动到 WSL 2 后为 docker 容器分配内存

Mur*_*aji 17 docker docker-for-windows wsl-2 ubuntu-20.04

我最近更新了我的 Docker 环境以WSL 2在 Windows上运行。

为了在以前的版本中设置容器的内存分配限制,我在 Docker 桌面 GUI 下Settings->Resources->Advanced->Preferences可以选择调整内存和 CPU 分配。

在 WSL 2 集成之后,我找不到那个选项。 在此处输入图片说明

我想我应该从现在开始通过我的 Linux 发行版运行所有内容,所以这是我能够找到的解决方案:

docker run -d -p 8081:80 --memory="256m" container_name
Run Code Online (Sandbox Code Playgroud)

我不想每次在运行容器时都设置一个标志。有没有办法永久设置内存分配?

Ale*_*x.H 33

为 WSL2 集成删除了内存和 CPU 设置。但是,从 Windows Build 18945 开始,有一种解决方法可以限制 WSL2 内存使用。

创建%UserProfile%\.wslconfig用于调整 WSL2 设置的文件:

[wsl2]
memory=6GB  # Any size you feel like
swap=0
localhostForwarding=true
Run Code Online (Sandbox Code Playgroud)

Get-Service LxssManager | Restart-Service在管理员 Powershell 中运行(或重新启动)并验证vmmem任务管理器中的使用率是否下降。

  • “.wslconfig”文件不支持浮点数。如果您设置“内存= 2.5GB”,它只会忽略您的设置,而不会发出任何警告。使用整数。 (12认同)
  • 是的,我就是这么做的。事实上,我推动 Microsoft 文档团队改进有关“.wslconfig”文件的文档。目前存在一个“Vmmem”占用大量内存的问题,他们计划尽快解决。该解决方案仅解决分配给 Linux 子系统的内存问题。我一直在寻找对每个容器资源的更精细的控制。不过还是谢谢你的回答。我还要再等几天才能得到适当的答复。 (5认同)
  • 不需要重新启动,只需在管理员 powershell 中运行“Get-Service LxssManager | Restart-Service”即可 (3认同)
  • @srk 对于那些使用 WSL2 后端运行 Docker Desktop for Windows 的人来说,答案确实与 Docker 相关,因为 Docker 守护进程在 WSL 中运行。 (2认同)
  • @TrojanName 确保您的 WSL 2 VM 分配了足够的内存。我自己分配了4GB。另外,如果您的容器没有足够的内存,则可能是您的 Docker compose 配置问题(如果您有的话)。确保您没有设置资源限制。它位于“services.<service-identifier>.deploy.resources.limits.memory”下。详细信息此处:https://docs.docker.com/compose/compose-file/compose-file-v3/#resources (2认同)

Jor*_*cia 14

您必须限制 WSL 内存使用...

步骤1

添加/编辑此文件%UserProfile%\.wslconfig并附加以下两行:

[wsl2]
memory=8GB
Run Code Online (Sandbox Code Playgroud)

第2步

之后立即完全关闭,以便 WSL 获取新设置:

$ wsl --shutdown
Run Code Online (Sandbox Code Playgroud)

请在此处查看 Microsoft 提供的其他信息:WSL 中的高级设置配置


实验解决方案(2023 年 9 月更新)

2023 年 9 月的更新添加了对新的选择加入实验功能的支持,包括新的autoMemoryReclaim,它可以通过回收缓存内存来减少使用 WSL VM 时的内存。如果你想尝试一下...

将这个新的实验部分添加到您的%UserProfile%\.wslconfig文件中:

[experimental] 
autoMemoryReclaim=gradual
Run Code Online (Sandbox Code Playgroud)

请在此处查看此设置和更多实验性设置:适用于 Linux 的 Windows 子系统 2023 年 9 月更新