创建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
答案 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