【问题标题】:Not able to set environment variable in Dockerfile for Custom runtime environment in google app engine无法在 Dockerfile 中为谷歌应用引擎中的自定义运行时环境设置环境变量
【发布时间】:2016-11-28 09:25:03
【问题描述】:

我正在使用下面的 Dockerfile 为应用引擎设置自定义运行时环境。

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

问题:

问题是我已经下载了应用程序引擎库 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.

【问题讨论】:

    标签: python-2.7 google-app-engine environment-variables dockerfile app-engine-flexible


    【解决方案1】:

    这应该是 Dockerfile 中的第一行:

    FROM gcr.io/google_appengine/python-compat-multicore
    

    您需要一个支持 App Engine API 的基础映像,在标准(运行时:python27)App Engine 运行时中支持 7 个 API。

    您收到上述导入错误,因为应用引擎 API 在您的 Dockerfile 指定的运行时中不可用。

    阅读更多here

    【讨论】:

    • 我需要安装一些 c 库,我使用 "RUN apt-get install -y python-pip build-essential libssl-dev libffi-dev python-dev libxml2-dev libxslt1-dev xmlsec1 " 但是,如果我使用 python 作为基础图像,我就不能这样做。因为它需要 apt-get。
    • 是的,您可以保留所有这些语句,只需将 FROM ubuntu:latest 替换为 FROM gcr.io/google_appengine/python-compat-multicore
    • 谢谢,解决了 ndb 库问题,我按照您的建议更改了基本映像,但现在我收到“BadArgumentError:应用程序不能为空”。看起来 webapp2 应用程序不应使用 ENTRYPOINT gunicorn -b :$PORT main:app 启动。知道如何从灵活的环境中启动 webapp2 应用程序。任何指向它的文件也会有所帮助。感谢您的宝贵意见。
    • 在扩展应用引擎运行时不应使用 gunicorn 启动应用。相反,配置您的 app.yaml 处理程序,就像您使用标准环境一样。
    • 下面是我的 app.yaml 文件:运行时:自定义 env:flex api_version:1 线程安全:true 处理程序:- url:/.* 脚本:main.app
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    相关资源
    最近更新 更多