无法运行Google App Engine自定义托管的虚拟机:--custom-entrypoint必须设置为错误

发布于 2021-01-29 15:12:51

问题描述

我正在尝试为Google App Engine创建自定义的托管VM,其行为与Google提供的标准python27托管VM相同。(我这样做是将C
++库添加到运行时的第一步)。

从google文档中,以下Dockerfile指定了标准的python27运行时:

FROM gcr.io/google_appengine/python-compat
ADD . /app

通过检查gcloud preview app run使用标准python27运行时生成的文件,我已经验证了这是正确的Dockerfile 。与此相同。

但是,当我使用dev_appserver.py或对此Dockerfile运行应用程序时,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
app引擎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"

我不确定该怎么做。码头工人映像是否应该尚未包含ENTRYPOINT?为什么要求我另外提供一个?另外,gcr.io/google_appengine/python- compat图像的入口点应该是什么?Google没有为此提供任何文档。

我尝试了一个无意义的方法--custom-entrypoint="echo",该方法使错误消失,但是应用程序不响应任何HTTP请求。

我发现的其他两个相关的stackoverflow问题没有帮助。接受的答案似乎表明这是已解决的SDK中的错误。但是我已经在两个版本的SDK(包括最新版本)中进行了尝试,但仍然存在问题。

重制步骤:

为了突出我的问题,我创建了一个琐碎的应用程序来生成错误。它仅包含三个文件:

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与python27gcloud preview app run运行时使用的相同(实际上是从字面上从使用python27运行时生成的Dockerfile复制粘贴),因此这应该与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)

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
关注者
0
被浏览
167
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    更新

    这可能不再准确。请参阅尼克的答案。

    (尽管我无法正常工作。但是我并没有很努力地尝试)


    自定义托管的VM有一个完全未记录但绝对必要的信息:

    它们无法在开发服务器上运行!

    如果您认为这个至关重要的事实会在所有理智的地方提及,例如自定义托管VM的文档页面,或者
    dev_appserver.py运行时的错误消息,甚至在运行时出现错误消息dev_appserver.py,那么您就应该对Google给予过多的赞誉。

    在github上的appengine-java-vm-guestbook-
    extras演示
    的自述文件中,我可以找到有关此声明的唯一方法(严重):

    提供Dockerfile时,Cloud SDK不支持运行自定义运行时。您必须将应用程序部署到App Engine

    Google不在乎:

    1. 实施此基本和重要功能。
    2. 记录开发服务器缺少如此重要的功能。
    3. 当用户不愿意执行该操作时,请给出任何合理的错误消息。

    我希望这个答案可以避免我因此而遭受的痛苦折磨。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看