我有一个 Node.js 应用程序,在我的机器上工作正常,因为我已经安装了 Python 并将其添加到全局环境变量 PATH 中 (也在 process.env.PATH 中),所以我可以运行:
const spawn = require("child_process").spawn;
console.log('PATH:::::');
console.log(process.env.PATH);
const pythonProcess = spawn('python', ["./detect_shapes.py", './example2.png']);
pythonProcess.stdout.on('data', (data) => {
console.log('DATA::::');
console.log(data);
res.render('index', {data});
});
上面的脚本基本上在我的Node.js应用程序内部运行一个单独的Python脚本,并返回响应。我可以运行任何机器上可以找到的基本命令,例如:const pythonProcess = spawn('ls');
。这行代码将运行ls命令并返回文件,正如预期的那样。
我还有一个像这样的Dockerfile
:
FROM node:9-slim
WORKDIR /app
COPY . /app
RUN npm install
EXPOSE 3000
CMD ["node", "index.js"]
我使用了这个确切的Dockerfile配置创建了nodejs应用程序,并且它也能正常工作,但由于我正在使用child_process.spawn函数,所以它可能不知道Python或其路径,因此我遇到了这个错误:
Error: spawn python ENOENT
at Process.ChildProcess._handle.onexit (internal/child_process.js:201:19)
at onErrorNT (internal/child_process.js:379:16)
at process._tickCallback (internal/process/next_tick.js:178:19)
Emitted 'error' event at:
at Process.ChildProcess._handle.onexit (internal/child_process.js:207:12)
at onErrorNT (internal/child_process.js:379:16)
at process._tickCallback (internal/process/next_tick.js:178:19)
我在我的Dockerfile中尝试添加RUN apt-get install python -y
以便安装python并在docker映像中使用它,但是这不起作用。我需要添加另一个FROM <image>
来安装Python吗?(我认为node:9-slim不知道如何安装Python,因为它没有用于安装Python的功能)。这样Docker就能知道如何下载Python,以便我可以使用它。此外,当我在Docker容器上打印
process.env.PATH
时,我得到以下内容:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
。如果这是问题,我该如何知道我的镜像中有Python工作,并且/或者如何将其添加到我的路径中?我对Docker很陌生。昨天我才学会,所以如果我没有表述清楚或者您需要更多信息,请私信我或留言。
apt-get install python -y
应该可以,出现了什么错误? - atlineE: 无法找到软件包python 命令'/bin/sh -c apt-get install python'返回非零代码:100
。我需要按照以下顺序进行吗:FROM node:9-slim RUN apt-get install python WORKDIR /app COPY . /app RUN npm install EXPOSE 3000 CMD ["node", "index.js"]
。 - Amir Šarandocker build -t myname/somename .
- Amir Šaran