Dockerfile / npm:创建一个sudo用户来运行npm install

时间:2014-02-20 11:29:13

标签: node.js ubuntu docker

创建Dockerfile以安装我们创建的节点框架(根据我之前的帖子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

问题是npm希望不以root身份运行 - 有没有办法将一系列sudo useradd命令链接起来创建一个具有sudo权限的临时用户,然后我可以切换到{{1运行USER

编辑:更新了上述内容,现在在成功创建用户并进入npm install行并窒息后获得此问题:

npm install

3 个答案:

答案 0 :(得分:8)

“尝试解锁”问题通常是由于未正确设置环境变量HOME引起的。 npm需要将其设置为可以编辑的目录(它在那里设置和管理.npm目录。)

您可以使用e在docker run来电中指定环境变量。 G。 docker run -e "HOME=/home/docker"

答案 1 :(得分:3)

要解决“尝试解锁”问题,请先尝试通过发出

来清理npm缓存
npm cache clean

之后,运行

npm install

答案 2 :(得分:1)

当我尝试执行时,我遇到类似的npm安装错误,因为我的Dockerfile中是非root用户。 Svante对这个问题的解释是肯定的,npm在$ HOME目录下做了一些缓存。这是一个简单的Dockerfile,适用于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