在GAE上部署Django应用时,Dockerfile中存在问题

时间:2019-03-06 10:23:33

标签: django google-app-engine dockerfile

我正在尝试使用Dockerfile的自定义映像在GAE上部署Django应用。我遵循Google提供的example。但是我在最后一步有问题:

CMD gunicorn -b :$PORT main:app

我已经尝试了好几种方法,但是一直在说找不到我的模块。

我尝试过的:

CMD gunicorn -b :$PORT wsgi:app

CMD gunicorn -b :$PORT mydjangoproject/wsgi:app

CMD gunicorn -b :$PORT mydjangoproject.wsgi


Dockerfile:

FROM solalsab/clarins:1.0.1

# Create a virtualenv for dependencies. This isolates these packages from
# system-level packages.
# Use -p python3 or -p python3.7 to select python version. Default is version 2.
RUN virtualenv /env

# Setting these environment variables are the same as running
# source /env/bin/activate.
ENV VIRTUAL_ENV /env
ENV PATH /env/bin:$PATH

# Copy the application's requirements.txt and run pip to install all
# dependencies into the virtualenv.
ADD requirements.txt requirements.txt
RUN pip install -r requirements.txt

# Add the application source code.
ADD . /app

# Run a WSGI server to serve the application. gunicorn must be declared as
# a dependency in requirements.txt.
CMD gunicorn -b :$PORT main:app

项目的结构:

+myproject/
 +mydjangoproject/
 | +wsgi.py
 | +...
 +app_template.yaml
 +generate_app_yaml.pu
 +manage.py
 +requirements.txt
 +Dockerfile

错误消息:

ERROR: (gcloud.app.deploy) Error Response: [9] 
Application startup error:
[2019-03-06 11:15:47 +0000] [6] [INFO] Starting gunicorn 19.9.0
[2019-03-06 11:15:47 +0000] [6] [INFO] Listening at: http://0.0.0.0:8080 (6)
[2019-03-06 11:15:47 +0000] [6] [INFO] Using worker: sync
[2019-03-06 11:15:47 +0000] [9] [INFO] Booting worker with pid: 9
[2019-03-06 11:15:47 +0000] [9] [ERROR] Exception in worker process
Traceback (most recent call last):
  File "/env/lib/python3.6/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker
    worker.init_process()
  File "/env/lib/python3.6/site-packages/gunicorn/workers/base.py", line 129, in init_process
    self.load_wsgi()
  File "/env/lib/python3.6/site-packages/gunicorn/workers/base.py", line 138, in load_wsgi
    self.wsgi = self.app.wsgi()
  File "/env/lib/python3.6/site-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/env/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 52, in load
    return self.load_wsgiapp()
  File "/env/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 41, in load_wsgiapp
    return util.import_app(self.app_uri)
  File "/env/lib/python3.6/site-packages/gunicorn/util.py", line 350, in import_app
    __import__(module)
ModuleNotFoundError: No module named 'main'
[2019-03-06 11:15:47 +0000] [9] [INFO] Worker exiting (pid: 9)
[2019-03-06 11:15:47 +0000] [6] [INFO] Shutting down: Master
[2019-03-06 11:15:47 +0000] [6] [INFO] Reason: Worker failed to boot.

预先感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

main:app部分可能来自其他代码示例(例如here),其中添加了main.py文件来引用您的应用。您可以在根目录中创建该main.py文件,然后添加:

from mydjangoproject.wsgi import application

app = application

或者像这样更新您的Dockerfile:

CMD gunicorn -b :$PORT mydjangoproject.wsgi

答案 1 :(得分:0)

我终于通过运行成功使其运行:

CMD CD应用; exec gunicorn mydjangoproject.wsgi