在 Windows 中迁移到 WSL 2 后对 docker 容器的内存分配

Posted

技术标签:

【中文标题】在 Windows 中迁移到 WSL 2 后对 docker 容器的内存分配【英文标题】:Memory allocation to docker containers after moving to WSL 2 in Windows 【发布时间】:2020-10-05 21:36:49 【问题描述】:

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

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

在 WSL 2 集成之后,我无法找到该选项。

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

docker run -d -p 8081:80 --memory="256m" container_name

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

【问题讨论】:

此命令是否适用于特定容器docker run -d -p 8081:80 --memory="256m" container_name 是的,@srk 【参考方案1】:

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

创建一个%UserProfile%\.wslconfig 文件以调整 WSL2 设置:

[wsl2]
memory=6GB  # Any size you feel like
swap=0
localhostForwarding=true

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

【讨论】:

是的,我这样做了。事实上,我推动 Microsoft 文档团队改进有关 .wslconfig 文件的文档。存在Vmmem 占用大量内存的问题,他们计划尽快解决。此解决方案仅解决分配给 Linux 子系统的内存。我一直在寻找对每个容器资源的更精细控制。不过感谢您的回答。我会再等几天以获得适当的答案。 绝对是@MurtazaHaji,这是正确的,这是整体 WSL 内存消耗。您是否尝试过应用此处显示的限制 (docs.docker.com/config/containers/resource_constraints)?我没有,但我会尝试回到你身边! 是的,内存标志在每个容器的基础上解决了这个问题,也许有一个用于分配内存的永久标志,但是找不到那个选项。 不需要重启,只需在你的 admin powershell 中运行“Get-Service LxssManager | Restart-Service” “.wslconfig”文件不支持浮点数。如果你设置memory=2.5GB,它只是忽略你的设置,没有任何警告。使用整数。

以上是关于在 Windows 中迁移到 WSL 2 后对 docker 容器的内存分配的主要内容,如果未能解决你的问题,请参考以下文章

12步搞定WSL 2,安装交互迁移VSCode远程调试应有尽有

WSL_03 WSL2 从C盘迁移到D盘

Windows10 Linux子系统安装/迁移到非系统盘

Windows10 Linux子系统安装/迁移到非系统盘

windows下通过wsl迁移默认安装的ubuntu到其他磁盘

wsl2迁移docker的ext4.vhdx