简略回覆:
在Windows%userprofile%目录(一般是C:Users)中,使用以下内容创建或编辑文件.wslconfig:
代码语言:javascript
复制
[wsl2]
kernelCommandLine = "sysctl.vm.max_map_count=262144"
之后退出任何WSL实例,wsl--shutdown,并重新启动。
代码语言:javascript
复制
> sysctl vm.max_map_count
vm.max_map_count = 262144
更详尽的情况:
你真的有三个(密切相关的)问题:
我们将把前三者结合上去,由于答案是“是的docker sysctl,您可以通过.wslconfig来完成。
这并不容易找到,由于变化是近来发生的。它来了礼貌的这个答案。
从内核版本5.8开始,可以在内核命令行上将sysctl值设置为sysctl.*前缀。
为此,只要您升级了WSL内核(自从wsl--update近来在21H1发布以来,我还没有在两个系统上使用它),您就可以像前面这样设置您的%userprofile%.wslconfig。
/etc/sysctl.conf
/etc/sysctl.conf将此值设置为永久值,虽然其在重新启动时存活出来.为何不呢?
这一节有好多比真正须要的更多,由于我先走了这条小狗的小径linux社区,把它作为最初的答案。但首先“为什么”不起作用..。
这是一个带有已知问题的WSL2。
尽管sysctl和Systemd/systemctl是两个完全不同的东西,但在这个问题上(Microsoft团队的)强调,必须读取和处理/etc/sysctl.conf。在大多数Linux发行版中,这是Systemd或SysVInit脚本。
另一方面,WSL使用它自己的/init来取代SysVInit或Systemd。WSL进程(目前)没有在启动时运行服务的机制,正如您在openSUSE文档中所发觉的那样。所以..。在启动时,/etc/sysctl.conf上没有任何读取和操作。
这个答案的其余部发包括一些不须要的systcl.conf解决方案,由于我们可以使用.wslconfig__来完成这种工作。这是留待万一有人发觉它有用的诱因。
这有几个解决办法。所有那些都涉及到找到一种手动运行sysctl-wvm.max_map_count=262144(作为root用户)的方式:
对于我们中的许多人来说linux多线程编程,在未来一段时间内,她们将在Windows10上工作docker sysctl,有几种选择。不幸的是,我还没有才能在Docker上测试这种实例,而且我在过去使用过类似的技术来处理其他WSL实例:
代码语言:javascript
复制
- "Basic Task"
- With the "Program" set to `wsl.exe`
- And the Arguments set to `-d docker-desktop sh -c "sysctl -w vm.max_map_count=262144"`
请注意,假若停靠桌面WSL实例在任何点中止,则修改将遗失直至上次重新启动。并且,因为Desktop是在启动/登陆时运行的,因而实例应当与此修改保持一致。
最后一个建议--向码头桌面小组递交一个功能恳求。IMHO觉得,对于Desktop的启动过程来说,读取/etc/sysctl.conf并相应地处理它是最容易的。