簡體   English   中英

無法找到/修改使用標准運行時(python27)的Google App Engine托管VM的Dockerfile

[英]Unable to find/modify the Dockerfile of a Google App Engine Managed VM that uses a standard runtime (python27)

我想修改使用標准運行時(python27)的Google App Engine管理的VM的Dockerfile。

我要添加一個C ++庫,該庫需要調用才能實現HTTP請求。 這個庫幾乎是我對沙盒python27運行時唯一需要的添加。

文檔很清楚地表明這是可能的:

每個標准運行時都使用由SDK提供的默認Dockerfile。 您可以通過向該文件添加新的docker命令來擴展和增強標准運行時。

他們在其他地方說,將在項目目錄中生成標准運行時的Dockerfile:

當您使用gcloud基於標准運行時(在本例中為Python27)運行或部署托管VM應用程序時,SDK將使用標准運行時作為基礎映像創建最小的Dockerfile。 您將在項目目錄中找到此Dockerfile ...

這是我應該根據同一頁面修改的內容:

本教程后面的步驟將向您展示如何通過向Dockerfile添加指令來擴展運行時環境的功能。

問題在於,當我在開發服務器上運行應用程序時,我無法在任何地方找到Dockerfile,因此無法對其進行任何更改。

是否有人設法修改Google App Engine的標准運行時Dockerfile? 任何幫助,將不勝感激。

要使用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)

似乎僅在使用gcloud preview app run時才生成gcloud preview app run而不是我正在使用的dev_appserver.py

但是,我無法修改Dockerfile並運行自定義托管VM。 但這是一個單獨的錯誤(與--custom_entrypoint相關)。

糟糕的文檔和支持助長了整個局勢的噩夢。 對其他正在考慮使用Google App Engine的開發人員的警告。

事實證明,在您的應用程序中擴展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運行時( 此處 )將Django部署到托管VM。

由於您使用的是自定義運行時,因此您必須自己實施運行狀況檢查。 但是,如果您需要訪問Google API,則Google提供了有關如何在GitHub上進行設置的示例( 此處 )。

要獲得實施健康檢查或與Google API集成的幫助,您可以按照Google Compute Engine入門系列教程( 此處 )進行操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM