【问题标题】:Nodejs Docker container immediately stop after run for express module not foundNodejs Docker容器在运行后立即停止快速模块未找到
【发布时间】:2020-04-08 12:43:56
【问题描述】:

我已经在 stackoverflow 上搜索了所有与此相关的答案,但似乎没有一个能解决我的问题。我正在按照此链接对我的 nodejs-mysql 应用程序进行 dockerize:

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/

Nodejs 的 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 文件 - 索引和结果

【问题讨论】:

  • 运行构建后容器对您可见吗?运行以下命令:docker images
  • 使用以下命令 docker run -it sh 从上面的 docker images 命令输出中获取图像 ID
  • 我尝试自己构建和运行 docker 映像并且能够成功运行......现在让我们调试你的实现......运行了以下命令:``` docker build -t test-nodejs 。 docker images docker run -t -d --publish 7000:7000 test-nodejs ```
  • 从错误日志来看,运行 nodejs 的依赖项似乎没有正确安装。值得查看docker build 日志。
  • 您将面临的另一个问题是 db connection url 。 localhost 将在运行时引用节点应用程序容器,这是错误的。搜索 docker network 以及如何在上面添加容器。

标签: mysql node.js docker


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2020-07-21
    • 1970-01-01
    • 1970-01-01
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    相关资源
    最近更新 更多