27

I'm using this container to start elasticsearch in docker. In accordance with the manual I have to update max_map_count to start the container

sudo sysctl -w vm.max_map_count=262144

but.. I can update it in my host (container) AFTER I start it while I'm unable to start it. Am I doing something wrong?

ERROR: bootstrap checks failed max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]

If I try to do it on my host machine (which is Mac) I get the following error.

sysctl: unknown oid 'vm.max_map_count'

Docker engine installs the Lunix VM where all containers are running. So the command to increase the limit should be executed for the Linux host, not for the Mac.

How can I access Linux VM via terminal installed by the Docker engine?

Alexey Strakh
  • 10,508
  • 17
  • 76
  • 146
  • You increased the vm max map count as a root user right ? – Kulasangar Dec 17 '16 at 11:09
  • yes, updated the command. But was executed for the host (Mac OS), not for the container OS (Linux) and it seems that it's required to be done for guest OS (container OS where the ES is setup). – Alexey Strakh Dec 17 '16 at 20:07

6 Answers6

47

On Docker Toolbox

If you are in docker toolbox try the docker client from terminal and then make the configs:

docker-machine ssh
sudo sysctl -w vm.max_map_count=262144
exit

On Docker For Mac:

The vm_max_map_count setting must be set within the xhyve virtual machine:

$ screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty

If it asks you for a username and passwordLog in with root and no password.

If it just has a blank screen, press RETURN.

Then configure the sysctl setting as you would for Linux:

sysctl -w vm.max_map_count=262144

Exit by Control-A Control-\.

Se the docs here.

Persistence

In some cases, this change does not persist across restarts of the VM. So, while screen'd into, edit the file /etc/sysctl.d/00-alpine.conf and add the parameter vm.max_map_count=262144 to the end of file.

Will Barnwell
  • 3,729
  • 18
  • 33
Octavio Soto
  • 731
  • 9
  • 13
  • you saved my day – Sergii Getman Apr 19 '17 at 14:23
  • 1
    just for completion: Be aware that this change is on the host OS and NOT inside the container. Containers share the same kernel as the host OS and for that reason it's working. On OSX the "docker host OS" is a VM which is wrapped by the docker-machine cli. – schmichri Jul 29 '17 at 21:46
  • you ask docker automatically [sets some environment variables](https://docs.docker.com/engine/reference/run/#env-environment-variables) when creating a Linux container. `docker run -e "MAX_MAP_COUNT=262144" ....` – keepscoding Sep 22 '17 at 04:06
  • 1
    @Octavio Question: I can't seem to edit that file, it keeps erroring out with `File is read-only`. I think it's something with xhyve being a read-only filesystem but my Docker/xhyve-fu is not nearly strong enough. How did you edit that file? – Pierce Feb 23 '18 at 22:31
  • 4
    When I hit `screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty` I go not such file or directory. – Ragnar Jul 28 '18 at 13:49
  • 5
    @Ragnar run `find ~/Library/Containers/com.docker.docker/Data/ -name 'tty'`. Mine was at `~/Library/Containers/com.docker.docker/Data/vms/0/tty` on High Sierra 10.13.6 – Damon Nov 21 '18 at 06:03
  • As @Pierce mentioned the file system is read only now: https://github.com/docker/for-mac/issues/2389#issuecomment-356547597 – Yannick Nov 12 '19 at 14:18
  • Is there another way of persisting this now? – Michael Armitage Feb 28 '20 at 11:19
  • Now you can change the virtual memory from the docker desktop GUI. Preferences -> Resources -> Swap -> Apply and Restart. – mewh Feb 11 '21 at 08:44
25

On Latest Docker For Mac (Version 18.06.0-ce-mac70):

$ screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty

On the blank screen, press RETURN.

Then configure the sysctl setting as you would for Linux:

sysctl -w vm.max_map_count=262144

Exit by Control-A Control-\

luskwater
  • 190
  • 8
Charith De Silva
  • 3,140
  • 4
  • 37
  • 47
  • How can this be persisted across a reboot? – Michael Armitage Feb 28 '20 at 11:07
  • I cannot `screen`. I get `Cannot exec '/Users/arielpontes/Library/Containers/com.docker.docker/Data/vms/0/tty': Permission denied`. `sudo` doesn't work either. The file exists but apparently cannot be executed no matter what. – Ariel Dec 15 '20 at 13:18
  • @Ariel were you able to resolve this issue because I am facing the same challenge right now – iChux Feb 14 '21 at 16:15
  • 1
    @iChux in Docker Desktop, go to Preferences, after, Resources and change the Swap value – krlosmederos Mar 31 '21 at 20:22
3

For those using Docker Desktop on windows 10 you have to execute:

wsl -d docker-desktop in the command line before sysctl -w vm.max_map_count=262144

Youssef
  • 6,411
  • 18
  • 67
  • 115
1

For those who use docker desktop on mac, you can easily increase the memory by the following steps:

  1. click on docker desktop -> preferences...
  2. navigate to 'Resources'
  3. change the memory to whatever you need
  4. click on 'Apply & Restard'
Marco
  • 550
  • 6
  • 22
0

Folder has been moved and this is the new location -

$screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty

and then

sysctl -w vm.max_map_count=262144

0

If you have installed Docker from docker's Mac installer then you will have Docker desktop installed(also includes includes Docker Engine, Docker CLI client, Docker Compose, Notary, Kubernetes, and Credential Helper.)

Here is what Docker desktop looks like in 2021 where you can change memory/swap or any other resources.

Step 1 - click on docker's preferences as shown below.

enter image description here

Step 2 - Click on resources tab, here you can tweak the resources and finally click on "Apply and Restart" button.

enter image description here

Please ignore configuration what I made. You can set based on your requirement.

Shakeel
  • 1,079
  • 7
  • 16