如何在docker中安装全局模块?

如何在docker中安装全局模块?,docker,npm,Docker,Npm,获取错误:EACCES:权限被拒绝,尝试在docker中安装全局模块时打开“/usr/local/lib/node\u modules: FROM node:latest RUN mkdir -p /code RUN npm i -g npm WORKDIR /code RUN npm set progress=false && npm install -g exp 官方或中没有相关信息。您可以在安装命令之前尝试以节点或root用户身份登录,在运行命令之前添加用户: USE

获取
错误:EACCES:权限被拒绝,尝试在docker中安装全局模块时打开“/usr/local/lib/node\u modules

FROM node:latest
RUN mkdir -p /code
RUN npm i -g npm
WORKDIR /code

RUN npm set progress=false &&  npm install -g exp

官方或

中没有相关信息。您可以在安装命令之前尝试以节点或root用户身份登录,在运行命令之前添加
用户

USER node


这是npm和exp模块之间的问题。您可以使用Thread来安装模块

MODULE 72: Module._load REQUEST path parent: /usr/local/lib/node_modules/exp/node_modules/decompress-zip/lib/file-details.js
MODULE 72: load native module path
ngrok - error unpacking binary { Error: EACCES: permission denied, open '/usr/local/lib/node_modules/exp/node_modules/@expo/ngrok/bin/ngrok'
  errno: -13,
  code: 'EACCES',
  syscall: 'open',
  path: '/usr/local/lib/node_modules/exp/node_modules/@expo/ngrok/bin/ngrok' }
npm info lifecycle @expo/ngrok@2.2.8~postinstall: Failed to exec postinstall script
npm WARN react-redux@5.0.6 requires a peer of react@^0.14.0 || ^15.0.0-0 || ^16.0.0-0 but none was installed.

MODULE 38: Module._load REQUEST os parent: /usr/local/lib/node_modules/npm/lib/utils/error-handler.js
MODULE 38: load native module os
但是你可以用纱线来安装它

$ yarn global add exp
详见下一期


由于安全原因,Npm默认情况下不允许以root用户身份运行。当您以root用户身份运行npm(这是Docker build中的默认用户)并安装全局包时,npm将以没有任何权限的用户身份安装并执行二进制文件

您可以通过添加
--unsafe perm
标志来避免这种情况:

RUN npm install --global --unsafe-perm exp
或者通过将全局用户显式设置为
root

RUN npm --global config set user root && \
    npm --global install exp

或者在docker构建期间切换到非根目录。请注意,这将影响容器中文件的所有权

用户指令设置运行映像时要使用的用户名(或UID)和可选的用户组(或GID),以及Dockerfile中紧随其后的任何RUN、CMD和ENTRYPOINT指令


这基本上意味着你没有权限。。。如果您尚未准备就绪,请尝试以管理员身份打开cmd。您是否在此图像上有sudo?尝试在Docker build中的“npm安装”之前添加sudo,默认情况下您是root用户。
RUN npm --global config set user root && \
    npm --global install exp