Dockerfile 中的权限被拒绝

Ron*_* Al 5 docker dockerfile nestjs

尝试构建我的 dockerfile,并收到权限被拒绝错误。该项目是一个 Nest.js 服务器。这是泊坞窗文件:

FROM node:12.13-alpine
WORKDIR /usr/src/app
COPY package.json .
RUN npm install   <<< this fails
COPY . .
RUN npm run build
EXPOSE 3000
CMD ["npm", "run", "start:prod"]
Run Code Online (Sandbox Code Playgroud)

错误(在 npm install 上)是:

internal/fs/utils.js:220
    throw err;
    ^

Error: EACCES: permission denied, open '/usr/local/lib/node_modules/npm/bin/npm-cli.js'
    at Object.openSync (fs.js:440:3)
    at Object.readFileSync (fs.js:342:35)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:994:22)
    at Module.load (internal/modules/cjs/loader.js:815:32)
    at Function.Module._load (internal/modules/cjs/loader.js:727:14)
    at Function.Module.runMain (internal/modules/cjs/loader.js:1047:10)
    at internal/main/run_main_module.js:17:11 {
  errno: -13,
  syscall: 'open',
  code: 'EACCES',
  path: '/usr/local/lib/node_modules/npm/bin/npm-cli.js'
Run Code Online (Sandbox Code Playgroud)

任何想法?

Ron*_* Al 5

解决了。解决方案分两步:

  1. 重新安装docker。
  2. 将所有者更改为节点,如下所示:
FROM node:10
RUN mkdir -p /home/node/app && chown -R node:node /home/node/app
WORKDIR /home/node/app
COPY package.json .
USER node
RUN npm install
...
Run Code Online (Sandbox Code Playgroud)

  • 无需重新安装 docker,您只需使用 COPY --chown node:node (来源:https://github.com/nodejs/docker-node/issues/1262#issuecomment-677577653)。 (2认同)