在Docker上构建Node js应用程序

时间:2016-03-10 05:45:40

标签: node.js docker dockerfile

我试图运行下面的docker文件

FROM node:latest

VOLUME /data

COPY package.json /data/
WORKDIR /data
RUN npm install

COPY . /data/

ENTRYPOINT ["npm", "run", "nodeApp"]

我能够在没有任何错误的情况下构建项目,但在运行时会抛出节点模块未找到错误。

更新:它会抛出,' json-server'在index.js文件中找不到异常

我的包结构如下,

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
}

2 个答案:

答案 0 :(得分:0)

基于您的package.json和项目结构

  1. 入口点应为["npm", "run", "payments-api"]
  2. payments-api应为node index.js values/db.json
  3. 修改

    根据所提供的信息很难分辨,但

    1. 可能json-server
    2. 中不需要index.js
    3. 你想在json-server中调用index.js命令,但由于它没有全局安装,因此无法找到它

答案 1 :(得分:0)

在运行npm install之后,您似乎正在将数据复制到卷中。 我想COPY会覆盖你的安装。 确认。

另外,将所有数据复制到容器中并不是一个好习惯。 每次更新源代码时都需要重建容器。

我建议你这样:

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