Dockerfile/npm: create a sudo user to run npm install

docker, node.js, ubuntu

Solution

To solve your "Attempt to unlock" issue, try cleaning the npm cache first by issuing

npm cache clean

After that, run

npm install

Problem

Creating a `Dockerfile` to install a node framework that we've created (per my earlier post here): ``` # 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 ``` The problem is that npm expects to be run not as root -- is there a way to chain a series of `sudo useradd` commands to create a temp user that has sudo privileges that I can then switch to `USER` to run the `npm install`? EDIT: updated the above, now getting this issue after successfuly creating a user and getting to the `npm install` line and choking: ``` Error: Attempt to unlock javascript-brunch@1.7.1, 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: <http://github.com/npm/npm/issues> ```

Original source