Dockerfile / npm: crée un utilisateur sudo pour exécuter npm install

Créer un Dockerfile pour installer un framework de noeud que nous avons créé (selon mon article précédent):

 # Install dependencies and nodejs RUN apt-get update RUN apt-get install -y python-software-properties python g++ make RUN add-apt-repository ppa:chris-lea/node.js RUN apt-get update RUN apt-get install -y nodejs # Install git RUN apt-get install -y git # Bundle app source ADD . /src # Create a nonroot user, and switch to it RUN /usr/sbin/useradd --create-home --home-dir /usr/local/nonroot --shell /bin/bash nonroot RUN /usr/sbin/adduser nonroot sudo RUN chown -R nonroot /usr/local/ RUN chown -R nonroot /usr/lib/ RUN chown -R nonroot /usr/bin/ RUN chown -R nonroot /src USER nonroot # Install app source RUN cd /src; npm install 

Le problème est que npm s’attend à être exécuté non pas en tant que root – existe-t-il un moyen de chaîner une série de commandes sudo useradd pour créer un utilisateur temporaire doté de privilèges sudo que je peux ensuite passer à USER pour exécuter l’ npm install ?

EDIT: mise à jour ci-dessus, maintenant obtenir ce problème après avoir réussi à créer un utilisateur et à accéder à la ligne d’ npm install et d’étouffement:

  Error: Attempt to unlock [email protected], which hasn't been locked at unlock (/usr/lib/node_modules/npm/lib/cache.js:1304:11) at cb (/usr/lib/node_modules/npm/lib/cache.js:646:5) at /usr/lib/node_modules/npm/lib/cache.js:655:20 at /usr/lib/node_modules/npm/lib/cache.js:1282:20 at afterMkdir (/usr/lib/node_modules/npm/lib/cache.js:1013:14) at /usr/lib/node_modules/npm/node_modules/mkdirp/index.js:37:53 at Object.oncomplete (fs.js:107:15) If you need help, you may report this *entire* log, including the npm and node versions, at:  

Pour résoudre votre problème “Tentative de délocking”, essayez d’abord de nettoyer le cache npm en émettant

 npm cache clean 

Après ça, cours

 npm install 

Le problème “Tentative de délocking” est souvent dû au fait que la variable d’environnement HOME n’est pas définie correctement. npm besoin que cela soit défini dans un répertoire qu’il peut éditer (il installe et gère un répertoire .npm ).

Vous pouvez spécifier des variables d’environnement dans votre appel de docker run -e "HOME=/home/docker" avec, par exemple, le docker run -e "HOME=/home/docker" .

Je suis tombé sur une erreur d’installation npm similaire lorsque j’essayais de l’exécuter en tant qu’utilisateur non root dans mon fichier Docker. L’explication de Svante sur le problème est frappante, npm fait de la mise en cache sous le répertoire $ HOME. Voici un simple fichier Dockerfile qui fonctionne avec npm install:

 FROM dockerfile/nodejs # Assumes you have a package.json in the current dir ADD . /src # Create a nonroot user, and switch to it RUN /usr/sbin/useradd --create-home --home-dir /usr/local/nonroot --shell /bin/bash nonroot RUN chown -R nonroot /src # Switch to our nonroot user USER nonroot # Set the HOME var, npm install gets angry if it can't write to the HOME dir, # which will be /root at this point ENV HOME /usr/local/nonroot # Install app source WORKDIR /src RUN npm install