Не удается найти / изменить файл 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, началу работы ( здесь).