1

標準ランタイム (python27) を使用する Google App Engine マネージド VM の Dockerfile を変更したいと考えています。

HTTP 要求を実装するために呼び出す必要がある C++ ライブラリを追加するために、これを実行したいと考えています。このライブラリは、サンドボックス化された python27 ランタイムに必要な唯一の追加機能です。

ドキュメントは、これが可能であることを非常に明確にしています:

各標準ランタイムは、SDK によって提供されるデフォルトの Dockerfile を使用します。このファイルに新しい docker コマンドを追加することで、標準ランタイムを拡張および強化できます。

他の場所では、標準ランタイムのDockerfileがプロジェクト ディレクトリに生成されると述べています。

gcloud を使用して、標準ランタイム (この場合は Python27) に基づくマネージド VM アプリケーションを実行またはデプロイすると、SDK は標準ランタイムをベース イメージとして使用して最小限の Dockerfile を作成します。この Dockerfile はプロジェクト ディレクトリにあります...

これは、同じページに従って変更することになっているものです。

このチュートリアルの後半のステップでは、Dockerfile に命令を追加してランタイム環境の機能を拡張する方法を示します。

問題は、開発サーバーでアプリケーションを実行すると、Dockerfile がどこにも見つからないため、変更を加えることができないことです。

Google App Engine の標準ランタイム Dockerfile を変更できた人はいますか? どんな助けでも大歓迎です。

4

3 に答える 3

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)
于 2015-11-20T15:29:07.117 に答える
0

アプリで 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 には、カスタム Python ランタイムを使用してマネージド VM に Django をデプロイするための非常に優れた GitHub の例があります (こちら)。

カスタム ランタイムを使用しているため、ヘルス チェックを自分で実装する必要があります。ただし、Google API にアクセスする必要がある場合は、Google の GitHub に設定方法の例があります (こちら)。

ヘルスチェックの実装、または Google API との統合については、Google Compute Engine の入門シリーズのチュートリアル (こちら) に従ってください。

于 2016-02-04T17:55:58.430 に答える