node.js - 无法基于 Node :8. 1 镜像为 Node 应用程序构建 Docker 容器

标签 node.js docker dockerfile

我正在尝试使用以下 Dockerfile 基于 node:8.1 镜像为我的应用创建一个容器:

FROM node:8.1.4


RUN mkdir /home/node/.npm-global ; \
    mkdir -p /home/node/app ; \
    chown -R node:node /home/node/app ; \
    chown -R node:node /home/node/.npm-global
ENV PATH=/home/node/.npm-global/bin:$PATH
ENV NPM_CONFIG_PREFIX=/home/node/.npm-global

USER node

WORKDIR /home/node/app

# Just for dev
RUN npm install mocha knex nodemon -g --quiet

# Opting for COPY over ADD as there is no need of auto extracting any compressed file
COPY . /home/node/app

RUN npm install --quiet

CMD node

但是,当它运行npm install --quiet时,我收到以下消息:

npm WARN deprecated <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="a5cbcac1c088d0d0ccc1e5948b918b92" rel="noreferrer noopener nofollow">[email protected]</a>: Use uuid module instead
npm WARN checkPermissions Missing write access to /home/node/app/node_modules/sqlite3/node_modules/node-pre-gyp/node_modules/mkdirp/node_modules/minimist
npm WARN checkPermissions Missing write access to /home/node/app/node_modules/sqlite3/node_modules/node-pre-gyp/node_modules/mkdirp
npm WARN checkPermissions Missing write access to /home/node/app/node_modules/sqlite3/node_modules/node-pre-gyp/node_modules/nopt/node_modules/abbrev
npm WARN checkPermissions Missing write access to /home/node/app/node_modules/sqlite3/node_modules/node-pre-gyp/node_modules/nopt
npm WARN checkPermissions Missing write access to /home/node/app/node_modules/sqlite3/node_modules/node-pre-gyp/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates

对于 package.json 中的每个包都会重复该消息。

最后是:

npm ERR! path /home/node/app/node_modules/sqlite3/node_modules/node-pre-gyp/node_modules/mkdirp/node_modules/minimist
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall access
npm ERR! Error: EACCES: permission denied, access '/home/node/app/node_modules/sqlite3/node_modules/node-pre-gyp/node_modules/mkdirp/node_modules/minimist'
npm ERR!  { Error: EACCES: permission denied, access '/home/node/app/node_modules/sqlite3/node_modules/node-pre-gyp/node_modules/mkdirp/node_modules/minimist'
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'access',
npm ERR!   path: '/home/node/app/node_modules/sqlite3/node_modules/node-pre-gyp/node_modules/mkdirp/node_modules/minimist' }
npm ERR!
npm ERR! Please try running this command again as root/Administrator.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/node/.npm/_logs/2017-07-12T15_51_42_496Z-debug.log
ERROR: Service 'api' failed to build: The command '/bin/sh -c npm install --quiet' returned a non-zero code: 243

以前使用node:7.1时,我无需将当前用户更改为node即可使其工作。

如何让我的应用程序部署与此镜像的最新版本一起使用?

最佳答案

通过将 USER 指令移至 FROM 指令正下方并从主机卷中删除现有的 node_modules 文件夹,问题得到了解决。

关于node.js - 无法基于 Node :8. 1 镜像为 Node 应用程序构建 Docker 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45062611/

相关文章:

docker - Dockerfile找不到复制的文件夹

node.js - Mongoose :中间件预删除选项不起作用

javascript - 通过其他模型加入

javascript - 使用 Not Null 将 findAll 序列化

bash - 从Dockerfile调用脚本时如何防止 `#!/bin/bash: not found`错误

reactjs - 容器化的 ReactJs 应用程序(来自 nginx 图像)不提供所有路由

docker - 使用Zookeeper和Kafka在容器之间连接失败

node.js - 是否可以为 NodeJS 应用程序设置基本 URL?

windows - 在dockerfile中多次切换转义字符

docker - 在创建 docker 服务时检测到某些图像的任务失败