How to increase the size of the /dev/shm in docker container
Asked Answered
O

5

153

Currently When I create new docker container the size of the shared memory directory is limited to 64MB. But, I need to increase this size since my application depend on this shared memory. Is there any way to increase the size of /dev/shm in docker container? I heard that the 64MB is hard coded in the docker code, How to install docker from source and change the value of the /dev/shm?

Ongoing answered 13/5, 2015 at 9:11 Comment(1)
I had to struggle to find this. However, it's exactly my problem. Adding shm_open and mmap here in hopes Google catches this SO post and makes other's lives easier. That's how I backed into this issue, not knowing anything about mapping the files to /dev/shm.Kathykathye
F
179

If you're using docker-compose, you can set the your_service.shm_size value if you want your container to use that /dev/shm size when running or your_service.build.shm_size when building.

Example:

version: '3.5'
services:
  your_service:
    build:
      context: .
      shm_size: '2gb' <-- this will set the size when BUILDING
    shm_size: '2gb' <-- when RUNNING 

Link to source.

Fallible answered 18/6, 2019 at 18:33 Comment(5)
this answer shows the differences of using shm_size in build case and service case. I wonder why the answer was not accepted!Ainslie
Because there is no mention of docker-compose in the question.Fablan
Putting shm_size in your_service.shm_size solved my problem. While others keep saying put it in buildYarvis
noob question, what is the your_service here? the name of the service? or should i keep the same?Dealfish
It is the name that you gave the service in the docker-compose.yml file. This only applies when using docker-compose.Fallible
A
120

You can modify shm size by passing the optional parameter --shm-size to docker run command. The default is 64MB.

eg:

docker run -it --shm-size=256m oracle11g /bin/bash
A answered 9/3, 2016 at 6:34 Comment(5)
This is not working on debian 8 with docker 1.11.0. Not working as build params either!Passim
Does increasing the shm size have any negative impact? (besides increased resource usage)Spires
This worked for me, but I set it to 2gb: --shm-size=2gbDreg
This solution is helpful (works also with = sign replaced by space). However, on Docker Desktop for Windows, for docker build (rather than docker run) it stopped working at some moment (perhaps after upgrade but I can't prove it). I realized it was caused by activating Docker Buildkit. This thread github.com/docker/buildx/issues/418 shows it does not support --shm-size option. Solution was to permanently set system variable DOCKER_BUILDKIT=0 and everything returned to normal.Aldenalder
This docker run --shm-size argument is also recommended by Ray (ray.init(), which needs it to run out-of-core and it also recommends "[..] to set this to more than 30% of available RAM."Fezzan
P
19

If you use docker-compose to set up your docker environment, it is also possible to set the shared memory in the docker-compose.yml configuration file:

build:
  context: .
  shm_size: '2gb'

More info in the compose-file docs:

Pythia answered 5/4, 2018 at 8:20 Comment(0)
P
11

If anybody is using an older docker version prior 1.10.0 and cannot upgrade for some reason, there is a workaround I used to set shm-size which works fine for me (you need sudo-rights to create the mount on the host):

sudo mkdir /mnt/dockershm
sudo mount -t tmpfs -o size=1G tmpfs /mnt/dockershm
docker run -d -v /mnt/dockershm:/dev/shm dockerimagetorun:latest
Portsmouth answered 25/11, 2019 at 9:51 Comment(0)
R
4

Sometimes it may more appropriate to edit the global config for docker daemon, rather than set the value in docker-compose.yml or at the cli.

Here is the documentation for Daemon configuration file

Pick one method of editing the config:

  1. On Docker Desktop you can go to Settings->[Docker Engine].
  2. On linux you may edit the default file at /etc/docker/daemon.json
  3. On windows %programdata%\docker\config\daemon.json
  4. On Mac ~/.docker/daemon.json

Edit the config file to change the shm default size.

Example:

{
   ...
   "default-shm-size" : "128M"
   ...
}

After the change, restart docker may be required to relaod the config.

Resinous answered 28/2, 2023 at 19:11 Comment(3)
This is the only way to change the config when you don't have access to the docker-compose.yml file or the docker command in the cli. For example using the supabase cli that: in the background generates and starts a group of docker-compose services.Baptiste
this is also useful for local mode of sagemaker jobsEdlun
Adding to @Davey's comment: this approach works, just remember to do supabase stop followed by supabase start to get the change effected.Warmup

© 2022 - 2024 — McMap. All rights reserved.