找不到Express模块​​后,NodeJS Docker容器立即停止运行

时间:2019-12-16 03:06:41

标签: mysql node.js docker

我在stackoverflow上搜索了与此相关的所有答案,但似乎没有一个能解决我的问题。我正在关注此链接以对我的nodejs-mysql应用进行泊坞处理:

https://github.com/varunon9/getting-started-docker-mysql-nodejs#launching-nodejs-app-in-a-container

当我进入步骤8并执行docker ps时,该容器未显示。我已经检查了日志,并显示“错误:找不到模块'express'”。我的运行命令是:

docker run  -t -d \
--publish 7000:7000 \
--link testmysqlservice:db \
--name=test-nodejs-microservice patient-nodejs

Docker Error Log shown here

After step-8 the sql service seems to get stuck or running not sure:

  

package.json文件

{
  "name": "paloit",
  "version": "1.0.0",
  "description": "",
  "main": "server.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node server.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "arraylist": "^0.1.0",
    "avl": "^1.4.4",
    "body-parser": "^1.19.0",
    "cheerio": "^1.0.0-rc.3",
    "ejs": "^3.0.1",
    "express": "^4.17.1",
    "hashmap": "^2.4.0",
    "hashtable": "git+https://github.com/fabrice102/node-hashtable.git",
    "jquery": "^3.4.1",
    "jsdom": "^15.2.1",
    "morgan": "^1.9.1",
    "multimap": "^1.1.0",
    "mysql": "^2.17.1",
    "request": "^2.88.0",
    "sort-map": "^1.0.0",
    "sorted-map": "^0.1.8",
    "yargs": "^15.0.2"
  }
}
  

Mysql的Docker文件

拉出mysql:5.7映像

FROM mysql:5.7

## The maintainer name and email
LABEL gaga maga <gagad@gmail.com>

# database = test and password for root = password
ENV MYSQL_DATABASE=patientdb \
    MYSQL_ROOT_PASSWORD=password

# when container will be started, we'll have `test` database created with this schema
COPY ./patientschem_patient.sql /docker-entrypoint-initdb.d/
  

用于Node.js的Dockerfile

# Use Node v8 as the base image.
FROM node:8

# create and set app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package.json /usr/src/app/
RUN npm install

# Bundle app source
COPY . /usr/src/app
EXPOSE 7000
# Run app
CMD ["npm", "start"]
  

server.js文件的一部分

const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const mysql = require('mysql');

const request = require('request');
const argv = require('yargs').argv;

app.use(express.static('public'));
app.use(bodyParser.urlencoded({ extended: true }));

app.set('view engine', 'ejs')

app.get('/', function(req, res) {
    
       ........
    request(url, function(error, response, body, next) {
        var illness = JSON.parse(body)
        var ill = illness._embedded.illnesses
        //var link = _links.self        
        
       res.render(....);
    });

});


function getConnection(){
    return mysql.createConnection(
        {
            host: 'localhost',
            user: 'root',
            password: 'password',
            database: 'patientschem'
        }

    )

}


app.post('/displayhospital', (req, res) => {
    console.log("trying to get form data");
    .......
    const queryString = "INSERT INTO patient (e, d, p) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE d = VALUES(dl), p = VALUES(pl)"

});
    

   

const server = app.listen(7000, () => {
    console.log(`Express running → PORT ${server.address().port}`);
  });

我有两个ejs文件-索引和结果

1 个答案:

答案 0 :(得分:0)

已解决: 问题出在我的package.json中。我想念快递。另外arraylist带有小'a',在我的server.js中,是require('Arraylist')造成了冲突。 但是令人惊讶的是,当我在没有docker的情况下运行该应用程序时,它已成功运行。 谢谢你。