ОПИСАНИЕ ПРОБЛЕМЫ
Я пытаюсь создать пользовательскую управляемую виртуальную машину для Google App Engine, которая ведет себя идентично стандартной управляемой виртуальной машине python27, предоставленной Google. (Я делаю это как первый шаг к добавлению библиотеки C++ в среду выполнения).
Из документации Google следующий файл Dockerfile определяет стандартный Время выполнения Python27:
FROM gcr.io/google_appengine/python-compat
ADD . /app
Я убедился, что это правильный Dockerfile, изучив файл, сгенерированный gcloud preview app run
при использовании стандартной среды выполнения python27. Это идентично этому.
Но когда я запускаю свое приложение с этим Dockerfile, используя dev_appserver.py
или gcloud preview app run
, я получаю сообщение об ошибке:
The --custom_entrypoint flag must be set for custom runtimes
Я использую последние версии gcloud (1.9.86, с компонентом app-engine-python версии 1.9.28) и автономный SDK для механизма приложений python (1.9.28). У меня была такая же проблема с более ранними версиями, поэтому я обновился до последней.
ЧТО Я ПРОБОВАЛА:
gcloud preview app run --help
говорит о --custom-entrypoint
следующее:
--custom-entrypoint CUSTOM_ENTRYPOINT
Specify an entrypoint for custom runtime modules. This is required when
such modules are present. Include "{port}" in the string (without
quotes) to pass the port number in as an argument. For instance:
--custom_entrypoint="gunicorn -b localhost:{port} mymodule:application"
Я не уверен, что с этим делать. Должен ли образ докера еще не содержать ENTRYPOINT? Почему я должен предоставить один в дополнение? Кроме того, какой должна быть точка входа для изображения gcr.io/google_appengine/python-compat
? Google не предоставляет документации для этого.
Я пробовал бессмысленный --custom-entrypoint="echo"
, который заглушает ошибку, но приложение не отвечает ни на какие HTTP-запросы.
Два других соответствующих вопроса stackoverflow, которые я нашел, не помогли. Принятые ответы, кажется, предполагают, что это ошибка в SDK, которая была устранена. Но я попробовал это в двух версиях SDK, включая последнюю, и у меня все еще есть проблема.
- Как исправить «
The --custom_entrypoint flag must be set for custom runtimes
» ? - Ошибка виртуальной машины, управляемой Google: пользовательская точка входа
ШАГИ ДЛЯ ВОСПРОИЗВЕДЕНИЯ:
Чтобы подчеркнуть мою проблему, я создал тривиальное приложение, которое генерирует ошибку. Он состоит всего из трех файлов:
app.yaml
:
module: default
version: 1
runtime: custom
api_version: 1
threadsafe: true
vm: true
handlers:
- url: /.*
script: wsgi.app
Dockerfile
:
FROM gcr.io/google_appengine/python-compat
ADD . /app
Этот Dockerfile
тот же самый, который используется для среды выполнения python27 (и фактически буквально скопирован из файла Docker, сгенерированного gcloud preview app run
при использовании среды выполнения python27), поэтому он должен быть идентичен настройке runtime: python27
.
wsgi.py
:
import webapp2
class Hello(webapp2.RequestHandler):
def get(self):
self.response.write(u'Hello')
app = webapp2.WSGIApplication([('/Hello', Hello)], debug=True)
Однако когда я запускаю dev_appserver.py app.yaml
в каталоге, содержащем эти три файла, я получаю следующую ошибку:
Traceback (most recent call last):
File "/home/vagrant/google-cloud-sdk/platform/google_appengine/dev_appserver.py", line 83, in <module>
_run_file(__file__, globals())
File "/home/vagrant/google-cloud-sdk/platform/google_appengine/dev_appserver.py", line 79, in _run_file
execfile(_PATHS.script_file(script_name), globals_)
File "/home/vagrant/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/devappserver2.py", line 1033, in <module>
main()
File "/home/vagrant/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/devappserver2.py", line 1026, in main
dev_server.start(options)
File "/home/vagrant/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/devappserver2.py", line 818, in start
self._dispatcher.start(options.api_host, apis.port, request_data)
File "/home/vagrant/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/dispatcher.py", line 194, in start
_module.start()
File "/home/vagrant/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/module.py", line 1555, in start
self._add_instance()
File "/home/vagrant/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/module.py", line 1707, in _add_instance
expect_ready_request=True)
File "/home/vagrant/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/custom_runtime.py", line 73, in new_instance
assert self._runtime_config_getter().custom_config.custom_entrypoint
File "/home/vagrant/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/module.py", line 383, in _get_runtime_config
raise ValueError('The --custom_entrypoint flag must be set for '
ValueError: The --custom_entrypoint flag must be set for custom runtimes