PROBLEM DESCRIPTION
I am trying to create a custom managed VM for Google App Engine that behaves identically to the standard python27 managed VM provided by Google. (I'm doing this as a first step to adding a C++ library to the runtime).
From google documentation, the following Dockerfile specifies the standard python27 runtime:
FROM gcr.io/google_appengine/python-compat
ADD . /app
I have verified that this is the right Dockerfile by examining the one generated by gcloud preview app run
when using the standard python27 runtime. It is identical to this.
But when I run my application with this Dockerfile using dev_appserver.py
or with gcloud preview app run
I get an error saying:
The --custom_entrypoint flag must be set for custom runtimes
I am using the latest versions of gcloud (1.9.86, with app-engine-python component version 1.9.28) and the standalone python app engine SDK (1.9.28). I had the same problem with earlier versions, so I updated to the latest.
THINGS I HAVE TRIED:
gcloud preview app run --help
has the following to say about --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"
I am not sure what to make of this. Should the docker image not already contain an ENTRYPOINT? Why am I being required to provide one in addition? Also, what should the entrypoint be for the gcr.io/google_appengine/python-compat
image be? Google provides no documentation for this.
I have tried a meaningless --custom-entrypoint="echo"
, which silences the error, but the application does not response to any HTTP requests.
The two other relevant stackoverflow questions I have found have not helped. The accepted answers seem to suggest that this is a bug in the SDK that was resolved. But I have tried it in two versions of the SDK, including the latest, and I still have the problem.
- How to fix “
The --custom_entrypoint flag must be set for custom runtimes
”? - Google Managed VM error - custom entry point
STEPS TO REPRORDUCE:
To highlight my problem, I have created a trivial application that generates the error. It consists of just three files:
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
This Dockerfile
is the same one that is used for the python27 runtime (and in fact literally copy-pasted from the Dockerfile generated by gcloud preview app run
when using the python27 runtime), so this should be identical to setting 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)
When I run dev_appserver.py app.yaml
in the directory containing these three files however, I get the following error:
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