gpt4 book ai didi

python - 如何在 nodejs Docker 镜像上安装 Python

转载 作者:太空宇宙 更新时间:2023-11-04 01:55:32 25 4
gpt4 key购买 nike

我有一个可以在我的机器上运行的 nodejs 应用程序,因为我安装了 python,它位于全局环境路径(也在 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});
});

上面的脚本基本上在我的 nodejs 应用程序中运行一个单独的 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)

我尝试添加 RUN apt-get install python -y在我的 Dockerfile 中,它可以在我的 docker 镜像中安装 python,我可以使用 python,但它不起作用。我是否必须添加另一个 FROM <image>可以在 Dockerfile 中安装 python(我认为 node:9-slim 不知道如何安装 python,因为它不用于此),因此 docker 知道如何下载 python,以便我可以使用它。

还有当我打印 process.env.PATH 时在我的 docker 容器上我得到这个:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin .我怎么知道我有 python 在我的图像上工作和/或如果这是问题,我如何将它添加到我的路径?

我是 Docker 的新手。我昨天才知道的,所以如果我没说清楚或者你需要更多信息,请私信我或发表评论。

最佳答案

其实这不是docker的问题,只是debian的问题。在安装包之前,您总是需要执行 apt-get update。所以,对于你的场景,它应该是:

RUN apt-get update || : && apt-get install python -y

根据您的意见:

W: Failed to fetch http://deb.debian.org/debian/dists/jessie-updates/InRelease Unable to find expected entry 'main/binary-amd64/Packages' in Release file (Wrong sources.list entry or malformed file) E: Some index files failed to download. They have been ignored, or old ones used instead. The command '/bin/sh -c apt-get update && apt-get install python -y' returned a non-zero code: 100

所以,你可以添加|| :apt-get 之后忽略错误,因为那时 python meta data 已经完成下载其他先前的 url hit,所以你可以绕过错误.

更新:

一个完整的可行解决方案,以备您需要比较时使用:

a.py:

print("success")

index.js:

const spawn = require("child_process").spawn;
console.log('PATH:::::');

console.log(process.env.PATH);
const pythonProcess = spawn('python', ['/app/a.py']);
pythonProcess.stdout.on('data', (data) => {
console.log('DATA::::');
console.log(data.toString());
});

pythonProcess.stderr.on('data', (data) => {
console.log("wow");
console.log(data.toString());
});

Docker 文件:

FROM node:9-slim

RUN apt-get update || : && apt-get install python -y

WORKDIR /app
COPY . /app
CMD ["node", "index.js"]

尝试命令:

orange@orange:~/gg$ docker build -t abc:1 .
Sending build context to Docker daemon 4.096kB
...
Successfully built 756b13952760
Successfully tagged abc:1

orange@orange:~/gg$ docker run abc:1
PATH:::::
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
DATA::::
success

关于python - 如何在 nodejs Docker 镜像上安装 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56913746/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com