2017-09-08 3 views
2

Je dois créer un conteneur docker avec le nœud v6.10.3, mais avec le dernier npm (actuellement v5.4.1) pour utiliser les nouvelles fonctionnalités npm pour les packages locaux.Rupture de NPM après sa mise à niveau dans le conteneur docker

Cette installation fonctionne sans aucun problème sur mon Mac, mais lorsque j'essaie de créer une image docker avec une telle installation, après la mise à jour de npm, l'outil npm se casse et génère un tas d'erreurs.

Voici l'exemple du Dockerfile, avec laquelle je peux reproduire ce problème (notez que mon vrai Dockerfile est plus complexe):

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 

Lorsque le processus de construction arrive à la ligne RUN npm i -g lerna il jette un tas d'erreurs telles que:

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) 

Tout autre script npm entraînerait les mêmes erreurs. La réinstallation de tous les paquets dont dépend npm ne me semble pas être une solution.

J'ai également essayé d'installer le noeud à l'intérieur du conteneur en utilisant nvm, mais j'ai eu les mêmes erreurs.

Ma version docker:

Docker version 17.06.2-ce, build cec0b72 

Quel est le problème avec ce Dockerfile et qu'est-ce que je manque?

+1

J'ai exactement le même problème ici, tout d'un coup. Je n'ai rien changé à mon Dockerfile ni à package.json, mais je ne peux plus déployer mon projet. Et comme c'est une sorte de dépendance de 5ème niveau (c'est le même paquet qui échoue) bonne chance de savoir qui est responsable de ce problème et de fournir une solution ... –

+0

@JorisMans, pour l'instant je suis satisfait de la solution postée ci-dessous (Npm installé en utilisant le fil). Peut-être que cela pourrait aussi être utile pour votre environnement. – sorjef

Répondre

2

J'ai trouvé une solution de contournement pour ce problème, en utilisant yarn.

Il semble bizarre, mais cela fonctionne:

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 

encore, ce serait bien si quelqu'un peut expliquer pourquoi la solution d'origine ne fonctionnait pas, et/ou aider à trouver une meilleure façon de le corriger.

+0

Je ne sais pas comment vous avez trouvé cela, mais cela résout aussi le problème de mon côté. FYI Je suis en train d'installer avec un nœud FROM: 7 image Docker. –

+0

Vous pouvez simplement utiliser les [images de nœuds] officielles (https://hub.docker.com/_/node/) fournies avec 'yarn' déjà installé. –