Как собрать docker для запуска Python3 из Node.js child_process в Google App Engine? - PullRequest
1 голос
/ 04 марта 2020

Я развертываю node.js веб-приложение в пользовательской среде исполнения с гибкой средой. Я вызываю child_process в Node.js, чтобы открыть 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

Как установить Python3 в Google Cloud Platform для приложения Node

Кажется, мне нужно что-то сделать с сборкой пользовательской среды выполнения из файла 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

что ничего из этого не сработало.

Как правильно это сделать и как я могу это сделать?

Спасибо.

1 Ответ

2 голосов
/ 04 марта 2020

Изображение Google основано на Ubuntu, но имеет только python 2 и 2.7. В этом ответе показано, как использовать python3 .6, но мы собираемся установить его через 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 из своего спавна, вам не нужно отсоединять (закомментированные строки), которые я включил, чтобы вы могли просто Звоните python.

...