无法在 Dockerfile 中为 google 应用引擎中的自定义运行时环境设置环境变量
Not able to set environment variable in Dockerfile for Custom runtime environment in google app engine
我正在使用下面的 Dockerfile 为 App Engine 设置自定义运行时环境。
FROM ubuntu:latest
RUN apt-get update -y
RUN apt-get install -y python-pip build-essential libssl-dev libffi-dev python-dev libxml2-dev libxslt1-dev xmlsec1
RUN apt-get install -y curl unzip
RUN curl https://dl.google.com/dl/cloudsdk/release/google-cloud-sdk.tar.gz > /tmp/google-cloud-sdk.tar.gz
RUN mkdir -p /usr/local/gcloud
RUN tar -C /usr/local/gcloud -xvf /tmp/google-cloud-sdk.tar.gz
RUN /usr/local/gcloud/google-cloud-sdk/install.sh
RUN curl https://storage.googleapis.com/appengine-sdks/featured/google_appengine_1.9.40.zip > /tmp/google_appengine_1.9.40.zip
RUN unzip /tmp/google_appengine_1.9.40.zip -d /usr/local/gae
ENV PATH $PATH:/usr/local/gcloud/google-cloud-sdk/bin
ENV PATH $PATH:/usr/local/gae/google_appengine/
COPY . /app
WORKDIR /app
EXPOSE 80
RUN pip install -r requirements.txt
ENTRYPOINT gunicorn -b :$PORT main:app
问题:
问题是我已经下载了 App Engine 库 zip 文件并将其解压缩并添加到 PATH 变量中,但是当 运行 应用程序通过指定的入口点时我仍然遇到导入错误。阅读 GAE 中的 docker 图像后,我了解到默认情况下它在根配置文件中运行,因此我认为该问题与更新根配置文件的 PATH 变量并在其他配置文件中访问它无关。
下面是堆栈跟踪
File "/usr/local/lib/python2.7/dist-packages/gunicorn/util.py", line 357, in import_app
__import__(module)
File "/app/main.py", line 6, in <module>
from com.sears.mrp.handlers.ProductRuleHandler import ProductRuleHandler
File "/app/com/sears/mrp/handlers/ProductRuleHandler.py", line 1, in <module>
from google.appengine.ext import ndb
ImportError: No module named google.appengine.ext
[2016-11-28 09:10:17 +0000] [10] [INFO] Worker exiting (pid: 10)
[2016-11-28 09:10:17 +0000] [5] [INFO] Shutting down: Master
[2016-11-28 09:10:17 +0000] [5] [INFO] Reason: Worker failed to boot.*
If any one has faced this issue before please provide solution, I'm clueless on that to try more.
这应该是您的 Dockerfile 中的第一行:
FROM gcr.io/google_appengine/python-compat-multicore
您需要一个支持 App Engine API 的基础映像,在标准(运行时:python27)App Engine 运行时支持 7 个 API。
您收到上述导入错误是因为应用引擎 API 在您的 Dockerfile 指定的运行时中不可用。
阅读更多here。
我正在使用下面的 Dockerfile 为 App Engine 设置自定义运行时环境。
FROM ubuntu:latest
RUN apt-get update -y
RUN apt-get install -y python-pip build-essential libssl-dev libffi-dev python-dev libxml2-dev libxslt1-dev xmlsec1
RUN apt-get install -y curl unzip
RUN curl https://dl.google.com/dl/cloudsdk/release/google-cloud-sdk.tar.gz > /tmp/google-cloud-sdk.tar.gz
RUN mkdir -p /usr/local/gcloud
RUN tar -C /usr/local/gcloud -xvf /tmp/google-cloud-sdk.tar.gz
RUN /usr/local/gcloud/google-cloud-sdk/install.sh
RUN curl https://storage.googleapis.com/appengine-sdks/featured/google_appengine_1.9.40.zip > /tmp/google_appengine_1.9.40.zip
RUN unzip /tmp/google_appengine_1.9.40.zip -d /usr/local/gae
ENV PATH $PATH:/usr/local/gcloud/google-cloud-sdk/bin
ENV PATH $PATH:/usr/local/gae/google_appengine/
COPY . /app
WORKDIR /app
EXPOSE 80
RUN pip install -r requirements.txt
ENTRYPOINT gunicorn -b :$PORT main:app
问题:
问题是我已经下载了 App Engine 库 zip 文件并将其解压缩并添加到 PATH 变量中,但是当 运行 应用程序通过指定的入口点时我仍然遇到导入错误。阅读 GAE 中的 docker 图像后,我了解到默认情况下它在根配置文件中运行,因此我认为该问题与更新根配置文件的 PATH 变量并在其他配置文件中访问它无关。
下面是堆栈跟踪
File "/usr/local/lib/python2.7/dist-packages/gunicorn/util.py", line 357, in import_app
__import__(module)
File "/app/main.py", line 6, in <module>
from com.sears.mrp.handlers.ProductRuleHandler import ProductRuleHandler
File "/app/com/sears/mrp/handlers/ProductRuleHandler.py", line 1, in <module>
from google.appengine.ext import ndb
ImportError: No module named google.appengine.ext
[2016-11-28 09:10:17 +0000] [10] [INFO] Worker exiting (pid: 10)
[2016-11-28 09:10:17 +0000] [5] [INFO] Shutting down: Master
[2016-11-28 09:10:17 +0000] [5] [INFO] Reason: Worker failed to boot.*
If any one has faced this issue before please provide solution, I'm clueless on that to try more.
这应该是您的 Dockerfile 中的第一行:
FROM gcr.io/google_appengine/python-compat-multicore
您需要一个支持 App Engine API 的基础映像,在标准(运行时:python27)App Engine 运行时支持 7 个 API。
您收到上述导入错误是因为应用引擎 API 在您的 Dockerfile 指定的运行时中不可用。
阅读更多here。