【问题标题】:How to install global npm dependencies in docker?如何在 docker 中安装全局模块?
【发布时间】:2018-02-17 02:24:32
【问题描述】:

尝试在 docker 中安装全局模块时获取 Error: EACCES: permission denied, open '/usr/local/lib/node_modules

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

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

官方docs for nodehttps://forums.docker.com/没有相关信息

【问题讨论】:

  • 这基本上意味着您没有访问权限...如果您还没有访问权限,请尝试以管理员身份打开 cmd

标签: docker npm


【解决方案1】:

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

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

RUN npm install --global --unsafe-perm exp

或通过将全局用户显式设置为root

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

source

或者通过在 docker build 期间切换到非 root USER。请注意,这会影响容器中文件的所有权。

USER 指令设置用户名(或 UID)和可选的用户组(或 GID),以在运行映像时以及 Dockerfile 中跟随它的任何 RUN、CMD 和 ENTRYPOINT 指令使用。

【讨论】:

  • 这对我有用。谢谢!
【解决方案2】:

您可以在安装命令之前尝试以节点或root用户身份登录,在RUN命令之前添加USER

USER node

USER root

【讨论】:

  • 也许你在这张图片上有 sudo ?尝试在“npm install”之前添加 sudo
  • 在 Docker 构建中,默认情况下您是 root。
【解决方案3】:

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

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 安装它

$ yarn global add exp

更多详情请参阅以下问题

https://github.com/expo/exp/issues/59

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    • 2013-04-29
    • 1970-01-01
    • 2015-02-07
    相关资源
    最近更新 更多