无法查找/修改使用标准运行时的Google App Engine托管VM的Dockerfile(python27)

时间:2015-11-17 07:04:04

标签: python google-app-engine google-app-engine-python gae-module managed-vm

我想修改使用标准运行时(python27)的Google App Engine托管VM的Dockerfile。

我想这样做是为了添加一个需要调用来实现HTTP请求的C ++库。这个库几乎是我对沙盒python27运行时所需要的唯一补充。

documentation非常清楚这是可能的:

  

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

Elsewhere他们说他们将在项目目录中生成标准运行时的Dockerfile:

  

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

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

  

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

问题是,当我在开发服务器上运行我的应用程序时,我无法在任何地方找到Dockerfile,因此我无法对其进行任何更改。

有没有人设法修改Google App Engine的标准运行时Dockerfile?任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

要使用google-api-python-client我有同样的问题,因为我需要pycrypto。我总是得到错误:

  

CryptoUnavailableError:没有可用的加密库

为了解决这个问题,我创建了一个实例启动处理程序来安装所有需要的库。这很丑,但它确实有效。

的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)

答案 1 :(得分:0)

似乎只有在使用gcloud preview app run而不是dev_appserver.py时才生成Dockerfile,这正是我所使用的。

但是我无法修改Dockerfile并运行自定义托管VM。但这是一个单独的错误(--custom_entrypoint相关)。

这种情况完全是由恶劣的文件和支持引发的噩梦。对于考虑使用Google App Engine的其他开发者的警告。

答案 2 :(得分:0)

事实证明,在应用程序中扩展Dockerfile并不像文档(Link)中声称的那样工作。实际上,如果存在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运行时(here)将Django部署到托管VM。

由于您正在使用自定义运行时,因此您必须自己实施运行状况检查。但是,如果您需要访问Google API,Google会举例说明如何在GitHub(here)上进行设置。

有关实施健康检查或与Google API集成的帮助,您可以按照Google Compute Engine入门系列教程(here)进行操作。