問題の説明
Google が提供する標準の python27 マネージド VM と同じように動作する、Google App Engine 用のカスタム マネージド VM を作成しようとしています。(これは、C++ ライブラリをランタイムに追加するための最初のステップとして行っています)。
Googleドキュメントから、次の Dockerfile は標準の python27 ランタイムを指定します。
FROM gcr.io/google_appengine/python-compat
ADD . /app
gcloud preview app run
標準の python27 ランタイムを使用して生成された Dockerfile を調べて、これが正しい Dockerfile であることを確認しました。これと同じです。
しかし、この 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) とスタンドアロン python アプリ エンジン SDK (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"
これについてどうすればよいかわかりません。docker イメージに ENTRYPOINT が含まれていてはいけませんか? 追加で提供する必要があるのはなぜですか? また、画像のエントリポイントは何にする必要がありgcr.io/google_appengine/python-compat
ますか? Google はこれに関するドキュメントを提供していません。
エラーを無音にする意味のない を試しました--custom-entrypoint="echo"
が、アプリケーションは HTTP 要求に応答しません。
私が見つけた他の2つの関連するstackoverflowの質問は役に立ちませんでした。受け入れられた回答は、これが解決された SDK のバグであることを示唆しているようです。しかし、最新のものを含む 2 つのバージョンの SDK で試しましたが、まだ問題があります。
- 「<code>The --custom_entrypoint flag must be set for custom runtimes」を修正する方法は?
- Google マネージド VM エラー - カスタム エントリ ポイント
再現手順:
私の問題を強調するために、エラーを生成する簡単なアプリケーションを作成しました。次の 3 つのファイルだけで構成されます。
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 ランタイムに使用されるものと同じです (実際には、python27 ランタイムを使用するときに生成された Dockerfile から文字通りコピーアンドペーストされgcloud preview app run
ます) 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)
ただし、これら 3 つのファイルを含むディレクトリで実行する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