我想修改使用标准运行时(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?任何帮助将不胜感激。
答案 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)进行操作。