Running elasticsearch in win10 [wsl2] docker-desktop requires to increase mmap counts to 262144 through sysctl -w vm.max_map_count=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
In an answer to this question and elastic's doc it is suggested to accordingly update the vm.max_map_count in /etc/sysctl.conf to set this value permanent, i. e. making it survive the reboot.
Please note the output below, showing the effective mmap count did not adapt to the value defined in sysctl.conf, after my attempt to follow this suggestion and after reboot.
Why didn't it?
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
Considering to have changed the wrong sysctl.conf in etc/ I tried to change the sysctl.conf in <hostname>:/tmp/docker-desktop-root/etc#.
This was not allowed as this is a Read-only file system.
Can/should this be parameterized in .wslconfig instead, if so, how?
Using openSUSE Leap 15.2 instead of Win10's PowerShell did not change the outcome.
<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
Notably, the header in the above sysctl.conf file refers to a /boot/sysctl.conf-<kernelversion>. Taking into account, mmap count might need to be defined in this file in order to be considered when booting, I tried to set the required parameter there, but had no permission to do so.
<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
One of the known issues and limitations reported in openSUSE:WSL - openSUSE Wiki is
A system in WSL does not actually boot and does not use systemd. A proprietary Microsoft /init binary initializes the system. Therefore service management does not work like in a VM. It rather behaves like an interactive container.
Can anyone verify this to be the reason why parameterizing sysctl.conf cannot be an effective approach to the purpose at hand?
System
Host 
OS: Microsoft Windows 10 Enterprise 
Version: 10.0.18363 Build 18363 \
Docker 
Client: 
Version:           20.10.8 
API version:       1.41 
Go version:        go1.16.6 
Git commit:        3967b7d 
Built:             Fri Jul 30 19:54:02 2021 
OS/Arch:           linux/amd64 
Plugins: 
compose: Docker Compose (Docker Inc., v2.0.0-rc.2) 
scan: Docker Scan (Docker Inc., v0.8.0)
Server: 
Engine: 
Version:          20.10.8 
API version:      1.41 (minimum version 1.12) 
Go version:       go1.16.6 
Git commit:       75249d8 
Built:            Fri Jul 30 19:52:10 2021 
OS/Arch:          linux/amd64 
containerd: 
Version:          1.4.9 
GitCommit:        e25210fe30a0a703442421b0f60afac609f950a3 
runc: 
Version:          1.0.1 
GitCommit:        v1.0.1-0-g4144b63 
docker-init: 
Version:          0.19.0 
GitCommit:        de40ad0 \
Kernel Version: 5.10.16.3-microsoft-standard-WSL2 
Operating System: Docker Desktop 
OSType: linux 
Architecture: x86_64 
CPUs: 4 
Total Memory: 12.39GiB 
Name: docker-desktop
 
     
     
    