在Docker上构buildNode js应用程序

我试图运行下面的docker文件

FROM node:latest VOLUME /data COPY package.json /data/ WORKDIR /data RUN npm install COPY . /data/ ENTRYPOINT ["npm", "run", "nodeApp"] 

我能够build立没有任何错误的项目,但在运行时抛出节点模块找不到错误。

更新 :它引发'json-server'在index.js文件没有发现exception

我的包装结构如下,

 data db.json Dockerfile index.js package.json 

Package.json文件如下,

 { "name": "node-api", "version": "0.0.1", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "nodeApp": "node index.js data/db.json" }, "author": "", "license": "ISC", "dependencies": { "json-server": "^0.8.2", "lowdb": "^0.10.2", "node-uuid": "^1.4.7" } } 

更新:index.js文件

 "use strict"; var jsonServer = require('json-server'); var low = require('lowdb'); var uuid = require('node-uuid'); var fs = require('fs'); var db = JSON.parse(fs.readFileSync(process.argv[2])); var writeDb = low(process.argv[2]); var server = jsonServer.create(); server.use(jsonServer.defaults()); var router = jsonServer.router(db); router.db._.id = 'id'; router.render = function (req, res) { return enhance(req, res); }; server.use('/api', router); server.use(router); server.listen(8081); function enhance(req, res) { return res.jsonp(res.locals.data); // do no processing } 

根据你的package.json和项目结构

  1. 入口点应该是["npm", "run", "payments-api"]
  2. payments-api应该是node index.js values/db.json

编辑

根据提供的信息很难说,但是

  1. 可能是json-serverindex.js不是必需的
  2. 你正打算在index.js调用json-server命令,但由于它没有全局安装,所以无法find

看起来好像是在运行npm install之后将数据复制到一个卷中。 我猜这个COPY会覆盖你的安装。 确认。

而且,将所有数据复制到容器中并不是一个好的做法。 每次更新源代码时,都需要重新构build容器。

我build议你这样的:

 FROM node:latest RUN mkdir -p /src WORKDIR /src ADD package.json /src/package.json RUN npm install; EXPOSE 8081 VOLUME ./:/src/ CMD npm nodeApp 

要么

 CMD node /src/index.js