如何修复“必须为自定义运行时设置 --custom_entrypoint 标志”?

How to fix "`The --custom_entrypoint flag must be set for custom runtimes`"?

我在 运行 gcloud preview app run app.yaml 时在 Appengine 上收到此错误: The --custom_entrypoint flag must be set for custom runtimes

我的app.yaml看起来像:

version: 0-1-1
runtime: custom
vm: true
api_version: 1
manual_scaling:
  instances: 1

handlers:
  - url: .*
    script: dynamic

我的 dockerfile 是: FROM google/nodejs-runtime

我重新安装了 gcloud 以获得最新版本,托管 VM 的 yaml 配置是否发生了某些变化?这让我无法测试我的应用程序。

中注释第 391 到 397 行

google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/module.py

#      if (self._module_configuration.effective_runtime == 'custom' and
#          os.environ.get('GAE_LOCAL_VM_RUNTIME') != '0'):
#        if not self._custom_config.custom_entrypoint:
#          raise ValueError('The --custom_entrypoint flag must be set for '
#                           'custom runtimes')
#        else:
#          runtime_config.custom_config.CopyFrom(self._custom_config)

Google Cloud SDK 版本 0.9.67 似乎存在错误或设置问题导致此错误。作为临时解决方法,您可以使用以下命令恢复到之前可用的 SDK 版本:

gcloud config set component_manager/fixed_sdk_version 0.9.66
gcloud components update

到return到SDK的当前版本,运行:

gcloud config unset component_manager/fixed_sdk_version
gcloud components update

这个问题出现在几个版本之前,并在此处得到解决:

您可以 运行 gcloud help preview app run 显示描述 运行 命令及其参数的手册页。 --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"

请注意,错误消息显示 --custom_entrypoint,带有下划线,但参数是 --customer_entrypoint,带有破折号。正确的名称是 --custom-entrypoint 参见:https://code.google.com/p/google-cloud-sdk/issues/detail?id=191

对于 nodejs 你应该可以使用类似的东西:

gcloud preview app run app.yaml --project=your-project-id --custom-entrypoint "node index.js {port}"

取决于您启动应用程序的方式。该端口似乎也可作为环境变量 PORT 使用,因此如果您的应用不处理命令行参数,则无需使用 {port}

但是我无法使用 npm start--custom-entrypoint 中的其他 npm run <script>