我在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
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文件
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文件-索引和结果
答案 0 :(得分:0)
已解决: 问题出在我的package.json中。我想念快递。另外arraylist带有小'a',在我的server.js中,是require('Arraylist')造成了冲突。 但是令人惊讶的是,当我在没有docker的情况下运行该应用程序时,它已成功运行。 谢谢你。