无法找到/修改使用标准运行时(python27)的Google App Engine托管虚拟机的Dockerfile



我想修改一个使用标准运行时(python27)的谷歌应用引擎管理的虚拟机的Dockerfile。

我想添加一个C++库来实现HTTP请求。这个库几乎是我需要添加到沙盒python27运行时中的唯一一个库。

文件清楚地表明这是可能的:

每个标准运行时都使用默认的Dockerfile,该文件由SDK提供。您可以通过向该文件添加新的docker命令来扩展和增强标准运行时。

在其他地方,他们说标准运行时的Dockerfile将在项目目录中生成:

当您使用gcloud基于标准运行时(在本例中为Python27)运行或部署托管VM应用程序时,SDK将使用标准运行时作为基本映像创建一个最小的Dockerfile。你会在你的项目目录中找到这个Dockerfile。。。

这是我应该根据同一页面修改的:

本教程后面的步骤将向您展示如何通过向Dockerfile添加指令来扩展运行时环境的功能。

问题是,当我在开发服务器上运行我的应用程序时,我在任何地方都找不到Dockerfile,所以我无法对它进行任何更改

有人修改过谷歌应用引擎的标准运行时Dockerfile吗?如有任何帮助,我们将不胜感激。

要使用google api python客户端,我也遇到了同样的问题,因为我需要pycrypto。我总是得到错误:

CryptoUnavailable错误:没有可用的加密库

为了解决这个问题,我创建了一个实例启动处理程序,用于安装所有需要的库。它很难看,但很管用。

app.yaml:

handlers:
- url: /_ah/start
  script: start_handler.app

start_handler.py

import webapp2
import logging
import os
class StartHandler(webapp2.RequestHandler):
  def execute(self, cmd):
    logging.info(os.popen("%s 2>&1" % cmd).read())
  def get(self):
    if not os.environ.get('SERVER_SOFTWARE','').startswith('Development'):
      self.execute("apt-get update")
      self.execute("apt-get -y install build-essential libssl-dev libffi-dev python-dev")
      self.execute("pip install cryptography")
      self.execute("pip install pyopenssl")

app = webapp2.WSGIApplication([
                                ('/_ah/start', StartHandler)
                              ], debug=True)

Dockerfile似乎只是在使用gcloud preview app run时生成的,而不是我使用的dev_appserver.py

然而,我无法修改Dockerfile并运行自定义托管虚拟机。但这是一个单独的错误(与--custom_entrypoint相关)。

糟糕的文件和支持助长了整个局势的噩梦。这是对其他考虑谷歌应用引擎的开发者的警告。

事实证明,在应用程序中扩展Dockerfile并不像文档(链接)中所说的那样工作。事实上,如果存在Dockerfile,您将得到以下错误:

"ERROR: (gcloud.preview.app.deploy) There is a Dockerfile in the current directory, and the runtime field in /[...]/app.yaml is currently set to [runtime: python27]. To use your Dockerfile to build a custom runtime, set the runtime field in [...]/app.yaml to [runtime: custom]. To continue using the [python27] runtime, please omit the Dockerfile from this directory"

我能够使用自定义Dockerfile的唯一方法是使用自定义运行时。

Google有一个非常好的GitHub示例,可以使用自定义Python运行时将Django部署到托管虚拟机(此处)。

由于您使用的是自定义运行时,您必须自己实现健康检查。然而,如果你需要访问谷歌API,谷歌有一个如何在GitHub上设置的例子(这里)。

有关实现健康检查或与Google API集成的帮助,您可以遵循Google计算引擎入门系列教程(此处)。

最新更新