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

时间:2017-09-08 08:14:25

标签: docker npm

尝试在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/

中没有相关信息

3 个答案:

答案 0 :(得分:5)

当您以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

答案 1 :(得分:2)

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

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

有关详细信息,请参阅以下问题

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

答案 2 :(得分:0)

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

USER root

SELECT COUNT(*) FROM User
union all
SELECT COUNT(*) FROM Friends
union all
SELECT COUNT(*) FROM Clans
union all
SELECT COUNT(*) FROM ClanMembers
union all
SELECT SUM(coins) FROM User
...