我在Node中有一个调用python脚本的server.js文件,如下所示:
// call python scripts
var spawn = require("child_process").spawn;
var process = spawn('python',["test.py", function_args]);
process.stdout.on('data', function (data){
res.json({
"answer" : from_python
})
});
当像往常一样简单地运行节点时,这非常有效:
node server.js
但是,当我将所有内容放在docker容器中时,应用程序永远不会进入process.stdout.on
其他一切都很完美。我可以提供静态文件,调用快速端点等。这只是没有被调用的进程。
我尝试将child_process作为依赖项放在我的package.json文件中。
这是我的Dockerfile:
FROM node:carbon
# Create app directory
WORKDIR /usr/src/app
# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
COPY package*.json ./
RUN npm install
# Bundle app source
COPY . .
EXPOSE 80
CMD ["npm","start"]
这是我的package.json文件:
{
"name": "my_app_name",
"version": "1.0.0",
"description": "my_desc",
"author": "my_name",
"main": "server.js",
"scripts": {
"start": "node server.js"
},
"dependencies": {
"express": "^4.16.2",
"path": "^0.12.7",
"fs": "^0.0.1-security",
"child_process": "^1.0.2"
}
}
请注意,运行server.js不是问题。此文件运行其他部分,例如提供静态文件和公开快速端点。问题似乎是child_process没有运行。并不是Python没有被调用,而是节点甚至不会进入server.js的进程部分。
另请注意,Python通过stdout打印其输出。不确定docker是否存在注册标准输出的问题。
答案 0 :(得分:0)
我认为
FROM node:carbon
应该是
FROM node:9.3
Carbon是LTS(目前仍然是8. 。)。您正在使用最新的v9.3.0中的库。