Error: EACCES: permission denied, open '/usr/local/lib/node_modules尝试在docker中安装全局模块时获取:
FROM node:latest
RUN mkdir -p /code
RUN npm i -g npm
WORKDIR /code
RUN npm set progress=false && npm install -g exp
Run Code Online (Sandbox Code Playgroud)
在node的官方文档中或https://forums.docker.com/中没有关于此的信息。
出于安全原因,默认情况下,Npm不允许以root用户身份运行。当您以root身份运行npm(这是Docker构建中的默认用户)并安装全局软件包时,npm会以nobody没有任何权限的用户身份安装并执行二进制文件。
您可以通过添加--unsafe-perm标志来避免这种情况:
RUN npm install --global --unsafe-perm exp
Run Code Online (Sandbox Code Playgroud)
或通过将全局用户显式设置为root:
RUN npm --global config set user root && \
npm --global install exp
Run Code Online (Sandbox Code Playgroud)
或在docker构建期间切换到非root 用户。请注意,这将影响容器中文件的所有权。
USER指令设置运行映像时要使用的用户名(或UID)以及可选的用户组(或GID),以及Dockerfile中跟随该映像的所有RUN,CMD和ENTRYPOINT指令。
根据当前的 docker-node 文档,您可以通过将以下行添加到 Dockerfile 来将全局 npm 依赖项的位置设置为用户可写的位置:
ENV NPM_CONFIG_PREFIX=/home/node/.npm-global
# optionally if you want to run npm global bin without specifying path
ENV PATH=$PATH:/home/node/.npm-global/bin
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3896 次 |
| 最近记录: |