Node.js生成的进程在Docker容器中不起作用

问题描述 投票:1回答:1

我在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是否存在注册标准输出的问题。

node.js docker
1个回答
0
投票

我认为

FROM node:carbon

应该

FROM node:9.3

碳是LTS(目前仍然是8 ..)。您正在使用最新的v9.3.0中的库。

© www.soinside.com 2019 - 2024. All rights reserved.