Не удается найти / изменить файл Docker управляемой виртуальной машины Google App Engine, которая использует стандартную среду выполнения (python27)

Я хочу изменить Dockerfile управляемой виртуальной машины Google App Engine, которая использует стандартную среду выполнения (python27).

Я хочу сделать это, чтобы добавить библиотеку C++, которая должна вызываться для реализации HTTP-запроса. Эта библиотека - практически единственное дополнение, которое мне нужно в изолированной среде выполнения python27.

Документация ясно дает понять, что это возможно:

Каждая стандартная среда выполнения использует Dockerfile по умолчанию, который предоставляется SDK. Вы можете расширить и улучшить стандартную среду выполнения, добавив в этот файл новые команды docker.

В другом месте они говорят, что Dockerfile стандартного времени выполнения будет сгенерирован в каталоге проекта:

Когда вы используете gcloud для запуска или развертывания управляемого приложения виртуальной машины на основе стандартной среды выполнения (в данном случае Python27), SDK создаст минимальный Docker-файл, используя стандартную среду выполнения в качестве базового образа. Вы найдете этот Dockerfile в каталоге вашего проекта...

Это то, что я должен изменить согласно той же странице:

Последующие шаги в этом руководстве покажут вам, как расширить возможности вашей среды выполнения, добавив инструкции в Dockerfile.

Проблема в том, что когда я запускаю свое приложение на сервере разработчика, я не могу нигде найти файл Docker, поэтому я не могу внести в него какие-либо изменения.

Кому-нибудь удалось изменить стандартный исполняемый Dockerfile для Google App Engine? Любая помощь будет оценена.

3 ответа

Решение

Кажется, что Dockerfile генерируется только при использовании gcloud preview app run и не dev_appserver.py, который был то, что я использовал.

Однако я не могу изменить Dockerfile и запустить настраиваемую управляемую виртуальную машину. Но это отдельная ошибка (--custom_entrypoint связанные с).

Вся эта ситуация является кошмаром, который подпитывают жестокие документы и поддержка. Предупреждение для других разработчиков, рассматривающих Google App Engine.

Чтобы использовать google-api-python-client, у меня была та же проблема, потому что мне нужен был pycrypto. Я всегда получаю ошибку:

CryptoUnavailableError: крипто-библиотека недоступна

Чтобы решить эту проблему, я создал обработчик запуска экземпляра, который устанавливает все необходимые библиотеки. Это некрасиво, но это работает.

app.yaml:

handlers:
- url: /_ah/start
  script: start_handler.app

start_handler.py

import webapp2
import logging
import os

class StartHandler(webapp2.RequestHandler):
  def execute(self, cmd):
    logging.info(os.popen("%s 2>&1" % cmd).read())

  def get(self):
    if not os.environ.get('SERVER_SOFTWARE','').startswith('Development'):
      self.execute("apt-get update")
      self.execute("apt-get -y install build-essential libssl-dev libffi-dev python-dev")
      self.execute("pip install cryptography")
      self.execute("pip install pyopenssl")


app = webapp2.WSGIApplication([
                                ('/_ah/start', StartHandler)
                              ], debug=True)

Оказывается, расширение Dockerfile в вашем приложении не работает так, как это предусмотрено в документации ( ссылка). Фактически, если присутствует Dockerfile, вы получите следующую ошибку:

"ERROR: (gcloud.preview.app.deploy) There is a Dockerfile in the current directory, and the runtime field in /[...]/app.yaml is currently set to [runtime: python27]. To use your Dockerfile to build a custom runtime, set the runtime field in [...]/app.yaml to [runtime: custom]. To continue using the [python27] runtime, please omit the Dockerfile from this directory"

Единственный способ, которым я смог использовать настроенный Dockerfile, - это использование пользовательской среды выполнения.

У Google есть действительно хороший пример GitHub для развертывания Django на управляемой виртуальной машине с использованием пользовательской среды выполнения Python ( здесь).

Поскольку вы используете пользовательскую среду выполнения, вам придется самостоятельно выполнять проверку работоспособности. Однако, если вам нужен доступ к API Google, у Google есть пример того, как настроить это на GitHub ( здесь).

Чтобы получить помощь в реализации проверки работоспособности или интеграции с API Google, вы можете воспользоваться учебными пособиями по Google Compute Engine, началу работы ( здесь).

Другие вопросы по тегам