我有一个npm包(npm版本为5.5.1,node版本为9.2.0)。如果我在本地机器上运行npm install
,那么会执行在package.json中定义的postinstall
。但是,如果我在Docker文件中运行相同的命令RUN npm install
,即在容器内部运行命令时,则不会执行postinstall
步骤。有任何想法,可能出了什么问题吗?
尝试使用 --unsafe-perm
选项运行安装。在以 root 用户身份运行时,npm 不会运行任何脚本。
另外,在 Dockerfile 中创建一个用户并切换到该用户:
FROM ...
RUN groupadd -r app && useradd -r -g app app
USER app
除了所选答案(@yamenk)之外,还有另一种选择,已在包括 OP 版本的 <v9.x 上进行测试: 您可以将此行添加到 Dockerfile 中,以配置容器内的 npm 配置(从而允许使用必要权限执行 postinstall 脚本):
FROM ...
RUN npm config set unsafe-perm true
如果在v9上:
FROM ...
# Create a non-root user
RUN useradd --user-group --create-home --shell /bin/false appuser
# Set the working directory (optional, uncomment if needed)
# WORKDIR /app
# Install dependencies as the non-root user, this will run postinstall
RUN chown -R appuser:appuser /app \
&& npm install
# BONUS: you can go back to default user w/ USER root instead, but if you want to run the application, you should do it as the non-root user, as in: USER appuser
.npmrc
文件,将其添加并将其设置为unsafe-perm=true
。 - sab