【发布时间】:2021-11-11 19:02:23
【问题描述】:
在 win10 [wsl2] docker-desktop 中运行 elasticsearch 需要通过 sysctl -w vm.max_map_count=262144 将 mmap 计数增加到 262144
C:\Users\<username>>wsl -d docker-desktop
<hostname>:/tmp/docker-desktop-root/mnt/host/c/Users/<username># sysctl -w vm.max_map_count=262144
在an answer to this question 和elastic's doc 中建议相应地更新/etc/sysctl.conf 中的vm.max_map_count 以将此值设置为永久,即。 e.使其在重新启动后仍然存在。
请注意下面的输出,显示有效 mmap 计数不适应 sysctl.conf 中定义的值,在我尝试遵循此建议并重新启动后。
为什么没有?
PS C:\Users\<username>> wsl -d docker-desktop
<hostname>:/tmp/docker-desktop-root/mnt/host/c/Users/<username># sysctl vm.max_map_count
vm.max_map_count = 65530
<hostname>:/tmp/docker-desktop-root/mnt/host/c/Users/<username># cd /etc
<hostname>:/etc# cat sysctl.conf
# content of this file will override /etc/sysctl.d/*
vm.max_map_count=262144
考虑到在etc/ 中更改了错误的sysctl.conf,我尝试更改<hostname>:/tmp/docker-desktop-root/etc# 中的sysctl.conf。
这是不允许的,因为这是Read-only file system。
是否可以/应该在 .wslconfig 中对其进行参数化,如果可以,如何?
使用 openSUSE Leap 15.2 代替 Win10 的 PowerShell 并没有改变结果。
<username@hostname>:~> sysctl vm.max_map_count
vm.max_map_count = 65530
<username@hostname>:~> cat /etc/sysctl.conf
####
#
# /etc/sysctl.conf is meant for local sysctl settings
#
# sysctl reads settings from the following locations:
# /boot/sysctl.conf-<kernelversion>
# /lib/sysctl.d/*.conf
# /usr/lib/sysctl.d/*.conf
# /usr/local/lib/sysctl.d/*.conf
# /etc/sysctl.d/*.conf
# /run/sysctl.d/*.conf
# /etc/sysctl.conf
#
# To disable or override a distribution provided file just place a
# file with the same name in /etc/sysctl.d/
#
# See sysctl.conf(5), sysctl.d(5) and sysctl(8) for more information
#
####
vm.max_map_count=262144
值得注意的是,上述 sysctl.conf 文件中的标头引用了 /boot/sysctl.conf-<kernelversion>。考虑到可能需要在此文件中定义 mmap 计数以便在启动时考虑,我尝试在那里设置所需的参数,但无权这样做。
<username@hostname>:/boot> sudo echo 'vm.max_map_count=262144' >> sysctl.conf-5.10.16.3-microsoft-standard-WSL2
-bash: sysctl.conf-5.10.16.3-microsoft-standard-WSL2: Permission denied
openSUSE:WSL - openSUSE Wiki 中报告的已知问题和限制之一是
WSL 中的系统实际上并没有引导并且不使用 systemd。专有的 Microsoft /init 二进制文件初始化系统。因此服务管理不像在虚拟机中那样工作。它的行为更像是一个交互式容器。
任何人都可以验证这是为什么参数化 sysctl.conf 不能成为实现手头目的的有效方法的原因吗?
系统
主持人
操作系统:Microsoft Windows 10 企业版
版本:10.0.18363 Build 18363 \
码头工人
客户:
版本:20.10.8
API 版本:1.41
Go 版本:go1.16.6
Git 提交:3967b7d
建成:2021 年 7 月 30 日星期五 19:54:02
操作系统/架构:linux/amd64
插件:
撰写:Docker Compose(Docker Inc.,v2.0.0-rc.2)
扫描:Docker 扫描(Docker Inc.,v0.8.0)
服务器:
引擎:
版本:20.10.8
API 版本:1.41(最低版本 1.12)
Go 版本:go1.16.6
Git 提交:75249d8
建成时间:2021 年 7 月 30 日星期五 19:52:10
操作系统/架构:linux/amd64
容器化:
版本:1.4.9
GitCommit:e25210fe30a0a703442421b0f60afac609f950a3
运行:
版本:1.0.1
GitCommit:v1.0.1-0-g4144b63
码头工人初始化:
版本:0.19.0
GitCommit: de40ad0 \
内核版本:5.10.16.3-microsoft-standard-WSL2
操作系统:Docker 桌面
操作系统类型:linux
架构:x86_64
CPU:4
总内存:12.39GiB
名称:码头工人桌面
【问题讨论】:
标签: docker elasticsearch wsl-2 opensuse