在 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远程调试应有尽有