尝试将 Java 应用程序部署到 Google Appengine 托管虚拟机。我正在使用控制台gcloud
并且已经准备好了 WAR 文件。加上应用程序。
使用以下命令:
gcloud preview app deploy ./build/libs/app.yaml
现在它失败了:
Building and pushing image for module [default]
-------------------------------------------------------------------------------- DOCKER BUILD OUTPUT --------------------------------------------------------------------------------
Step 0 : FROM gcr.io/google_appengine/jetty9
---> 005014071b64
Step 1 : ADD webapp-webapp.war $JETTY_BASE/webapps/root.war
---> 3e9023930cc8
Removing intermediate container 342e8a2f5750
Successfully built 3e9023930cc8
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Beginning teardown of remote build environment (this may take a few seconds).
Updating module [default]...failed.
ERROR: (gcloud.preview.app.deploy) Error Response: [400] "env" setting is not supported for this deployment.
我看到当项目未配置为 WAR 时发生的maven-gcloud-plugin
类似的错误(在那里)。但请注意:
- 我正在使用普通的命令行工具
gcloud
,最新版本 - 并且我的项目已经打包到 WAR 中
我也使用以下app.yaml
(我从 maven 插件源获得):
runtime: java
env: 2
api_version: 1
handlers:
- url: .*
script: dynamic
所以问题,这个错误来自哪里(docker 镜像此时已经准备好了,对吧?什么意思?以及如何解决这个问题?
更新我注意到它对 VM 使用FROM gcr.io/google_appengine/jetty9
。但是对于Appengine来说,它应该是FROM gcr.io/google_appengine/jetty9-compat
。我尝试切换到分解的应用程序而不是 WAR,它开始使用正确的 Docker 基础映像。但仍然失败:
Building and pushing image for module [default]
-------------------------------------------------------------------------------- DOCKER BUILD OUTPUT --------------------------------------------------------------------------------
Step 0 : FROM gcr.io/google_appengine/jetty9-compat
---> 2ad8572ef3d8
Step 1 : ADD . /app/
---> b10f4bc6718e
Removing intermediate container 8b149f4baf9c
Successfully built b10f4bc6718e
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Beginning teardown of remote build environment (this may take a few seconds).
Updating module [default]...failed.
ERROR: (gcloud.preview.app.deploy) Error Response: [400] "env" setting is not supported for this deployment.
原因是app.yaml
中的这一行:
env: 2
尝试在没有此选项的情况下部署太简单和太明显了。此外,每个官方和非官方文档都提到您需要设置env: 2
选项才能将您的应用程序部署为 Appengine 应用程序。这真的很奇怪。
删除此行还将基本 Docker 映像更改为 gcr.io/google_appengine/java-compat
。我想这意味着码头图像(包括jetty9-compat
)与Appengine应用程序不兼容