python - 如何构建 docker 以从 Google App Engine 中的 Node.js child_process 运行 Python3?
问题描述
我正在使用 flex 环境在自定义运行时部署 node.js Web 应用程序。我在 Node.js 中调用 child_process 来打开 python3:
const spawn = require("child_process").spawn;
pythonProcess = spawn('python3');
它在本地运行良好,但是当部署到 GAE 时,它给了我一个错误,如下所示:
Error: spawn python3 ENOENT
at Process.ChildProcess._handle.onexit (child_process.js:240)
at onErrorNT (internal/child_process.js:415)
at process._tickCallback (next_tick.js:63)
但是,当我运行 python2 时,它工作正常。
在做了一些研究和挖掘之后,我在stackoverflow上遇到了这个问题
如何在 Google Cloud Platform 中为 Node 应用程序安装 Python3
似乎我必须从 docker 文件构建自定义运行时以允许多个运行时(类似的东西)。
我用 docker 文件尝试了无数的东西,例如:
# Trying to install python3
FROM ubuntu as stage0
WORKDIR /python/
RUN apt-get update || : && apt-get install --yes python3;
RUN apt-get install python3-pip -y
# My main node.js docker stuff
FROM gcr.io/google_appengine/nodejs
COPY . /app/
... etc
和
# From google app engine python runtime docker repo
FROM gcr.io/google-appengine/python
RUN virtualenv /env
ENV VIRTUAL_ENV /env
ENV PATH /env/bin:$PATH
ADD requirements.txt /app/requirements.txt
RUN pip install -r /app/requirements.txt
ADD . /app
# My main node.js docker stuff
FROM gcr.io/google_appengine/nodejs
COPY . /app/
... etc
它都没有奏效。
这样做的正确方法是什么,我该怎么做?
谢谢你。
解决方案
Google 的镜像是基于 ubuntu 但只有 python 2 和 2.7。这个答案展示了如何使用 python3.6,但我们将通过 software-properties-common 安装 3.5。把东西放在一起,你会得到:
FROM launcher.gcr.io/google/nodejs
# same as
# FROM gcr.io/google-appengine/nodejs
RUN apt-get update && apt-get install software-properties-common -y
# RUN unlink /usr/bin/python
# RUN ln -sv /usr/bin/python3.5 /usr/bin/python
# RUN python -V
RUN python3 -V
# Copy application code.
COPY . /app/
# Install dependencies.
RUN npm --unsafe-perm install
如果你只是python3
要从你的 spawn 调用,你不需要取消我包含的链接(注释行),这样你就可以调用 python。
推荐阅读
- javascript - 从对象数组中组合未知的对象子数组并过滤它
- sql - where 子句中的日期时间条件无法正常工作
- react-native - 如果渲染项返回 null,则处理 numcolumn 大于 2 的平面列表
- flask - TypeError:execute_values() 得到了一个意外的关键字参数 'fetch'
- angular - 如何打开对话框并从 BehaviorSubject 传递数据?
- c++ - 为什么 Eigen 不需要模板关键字来使用 Matrix 的模板函数调用?
- css - 如何增加特异性权重
- antd - ant design 3.0.3升级到3.lastest,所有svg丢失
- matlab - micronDetect 输入显示在 doorTime 输入之前,并且 fprintf 函数都不会显示
- c# - 调试项目时,ASP .NET 应用程序中的 Oracle.DataAccess.dll 出现问题