Search code examples
node.jsdockerdocker-composeyarnpkg

Docker Container yarn install ENOMEM: not enough memory


I'm using docker compose on remote server and in the entrypoint to one of the services I have a shell script that has

yarn install --production --frozen-lockfile

This had to be done because I'm downloading the project files from git inside entrypoint by adding ssh keys for github from local. The downloading of project files is done only if it's not already available in the volume.

I'm using the user home folder /home/appuser as a volume so that it's shared with other services, mounting it like this:

    volumes:
      - appuser-home-store:/home/appuser

yarn install inside this entrypoint has been very unstable, it randomly works but most of the times gives error:

error https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-6.5.4.tgz: Extracting tar content of undefined failed, the file appears to be corrupt: "ENOMEM: not enough memory, open '/home/appuser/.cache/yarn/v6/npm-workbox-background-sync-6.5.4-3141afba3cc8aa2ae14c24d0f6811374ba8ff6a9-integrity/node_modules/workbox-background-sync/LICENSE'"

Almost everytime the location after open is different

In the build I'm using

FROM node:lts

I have tried export NODE_OPTIONS=--max-old-space-size=8192

But I don't think this is relevant to my problem and didn't work anyway.

I have total of 200GB storage on this server, and I see that only 6% is used. I have tried many things, deleting volume, docker system prune, yarn cache clean and many other but none of them were successful, how to fix this?


Solution

  • This is a genuine error and known issue even on yarn github: https://github.com/yarnpkg/berry/issues/4373

    The error is not at all same as mine so I could not find it but, one of the solution given on this issue thread worked.

    The solution is to set yarn version to canary which can be done using

    yarn set version canary