Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NPM breaks after it has been upgraded in docker container

I need to create a docker container with node v6.10.3, but with the latest npm (currently v5.4.1) to use new npm features for local packages.

Such installation runs without any problem on my Mac, but when I try to create a docker image with such an installation, after updating npm, the npm tool gets broken and throws a bunch of errors about missing packages.

Here is the example of the Dockerfile, with which I can reproduce this issue (note that my real Dockerfile is more complex):

FROM ubuntu:xenial

RUN apt-get update
RUN apt-get install -y curl

RUN curl -sL https://deb.nodesource.com/setup_6.x | bash -
RUN apt-get install -y nodejs

RUN npm i -g npm
RUN npm i -g lerna

When the build process gets to the line RUN npm i -g lerna it throws a bunch of errors like:

Error: Cannot find module 'process-nextick-args'
    at Function.Module._resolveFilename (module.js:469:15)
    at Function.Module._load (module.js:417:25)
    at Module.require (module.js:497:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/usr/lib/node_modules/npm/node_modules/readable-stream/lib/_stream_readable.js:26:23)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)

Any other npm script would result in the same errors. Reinstalling all the packages on which npm depends, does not seem as a solution for me.

I have also tried to install node inside the container using nvm, but I got the same errors.

My docker version:

Docker version 17.06.2-ce, build cec0b72

What's wrong with this Dockerfile and what am I missing?

like image 571
sorjef Avatar asked Dec 08 '25 22:12

sorjef


1 Answers

I have found a workaround for this issue, using yarn.

It looks weird, but it works:

FROM ubuntu:xenial

RUN apt-get update
RUN apt-get install -y curl

RUN curl -sL https://deb.nodesource.com/setup_6.x | bash -
RUN apt-get install -y nodejs

RUN npm i -g yarn
RUN npm uninstall npm -g
RUN yarn global add npm
RUN npm i -g lerna

Still, it would be great if somebody can explain why the original solution did not work, and/or help find a better way to fix it.

like image 95
sorjef Avatar answered Dec 10 '25 10:12

sorjef



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!