Flask unable to start server using Docker due to ModuleNotFoundError: No module named 'wsgi'
Flask unable to start server using Docker due to ModuleNotFoundError: No module named 'wsgi'
我现在使用 Nginx 和 Docker 部署我的 Flask 应用程序。我的 docker 已经启动并且 运行 正在运行,但是当我去其中一个端点时我总是得到 502 Bad Gateway nginx
。
所以我删除所有 docker 并重新构建它,然后我得到这个错误,当 运行ning docker-compose up -d
:
[2020-03-09 15:00:11 +0000] [1] [INFO] Starting gunicorn 19.7.1
flask | [2020-03-09 15:00:11 +0000] [1] [INFO] Listening at: http://0.0.0.0:5000 (1)
flask | [2020-03-09 15:00:11 +0000] [1] [INFO] Using worker: sync
flask | [2020-03-09 15:00:11 +0000] [7] [INFO] Booting worker with pid: 7
flask | [2020-03-09 15:00:11 +0000] [7] [ERROR] Exception in worker process
flask | Traceback (most recent call last):
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/arbiter.py", line 578, in spawn_worker
flask | worker.init_process()
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/workers/base.py", line 126, in init_process
flask | self.load_wsgi()
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/workers/base.py", line 135, in load_wsgi
flask | self.wsgi = self.app.wsgi()
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/app/base.py", line 67, in wsgi
flask | self.callable = self.load()
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 65, in load
flask | return self.load_wsgiapp()
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
flask | return util.import_app(self.app_uri)
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/util.py", line 352, in import_app
flask | __import__(module)
flask | ModuleNotFoundError: No module named 'wsgi'
flask | [2020-03-09 15:00:11 +0000] [7] [INFO] Worker exiting (pid: 7)
flask | [2020-03-09 15:00:11 +0000] [8] [INFO] Booting worker with pid: 8
flask | [2020-03-09 15:00:11 +0000] [8] [ERROR] Exception in worker process
flask | Traceback (most recent call last):
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/arbiter.py", line 578, in spawn_worker
flask | worker.init_process()
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/workers/base.py", line 126, in init_process
flask | self.load_wsgi()
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/workers/base.py", line 135, in load_wsgi
flask | self.wsgi = self.app.wsgi()
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/app/base.py", line 67, in wsgi
flask | self.callable = self.load()
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 65, in load
flask | return self.load_wsgiapp()
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
flask | return util.import_app(self.app_uri)
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/util.py", line 352, in import_app
flask | __import__(module)
flask | ModuleNotFoundError: No module named 'wsgi'
flask | [2020-03-09 15:00:11 +0000] [8] [INFO] Worker exiting (pid: 8)
flask | [2020-03-09 15:00:11 +0000] [9] [INFO] Booting worker with pid: 9
flask | [2020-03-09 15:00:11 +0000] [9] [ERROR] Exception in worker process
flask | Traceback (most recent call last):
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/arbiter.py", line 578, in spawn_worker
flask | worker.init_process()
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/workers/base.py", line 126, in init_process
flask | self.load_wsgi()
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/workers/base.py", line 135, in load_wsgi
flask | self.wsgi = self.app.wsgi()
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/app/base.py", line 67, in wsgi
flask | self.callable = self.load()
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 65, in load
flask | return self.load_wsgiapp()
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
flask | return util.import_app(self.app_uri)
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/util.py", line 352, in import_app
flask | __import__(module)
flask | ModuleNotFoundError: No module named 'wsgi'
flask | [2020-03-09 15:00:11 +0000] [9] [INFO] Worker exiting (pid: 9)
flask | [2020-03-09 15:00:11 +0000] [1] [INFO] Shutting down: Master
flask | [2020-03-09 15:00:11 +0000] [1] [INFO] Reason: Worker failed to boot.
这意味着我的 Flask 服务构建失败,因此 Nginx 代理的应用程序服务器不是 运行ning,根据这个 answer。但我不知道要去哪里错了。
这是我的 docker-compose.yml
:
version: '3'
services:
flask:
build:
context: app
dockerfile: Dockerfile
container_name: flask
image: digitalocean.com/flask-python:3.6
restart: unless-stopped
environment:
APP_ENV: "prod"
APP_DEBUG: "False"
APP_PORT: 5000
service_2:
...
service_3:
...
这是我的app/Dockerfile
FROM python:3.6.8-alpine3.9
WORKDIR /var/www/
ADD . /var/www/
RUN apk add --no-cache build-base libffi-dev openssl-dev ncurses-dev
RUN python -m pip install --upgrade pip
RUN pip install -r requirements.txt // gunicorn is install inside requirements.txt
EXPOSE 5000
CMD [ "gunicorn", "-w", "4", "--bind", "0.0.0.0:5000", "wsgi"]
这是我的项目目录:
home
-project_root
-docker-compose.yml
--app
---all other files
---Dockerfile
---requirements.txt
---wsgi.py
这是我的 wsgi.py
:
import os
from app import create_app
from flask_cors import CORS
app = create_app()
cors = CORS(app)
if __name__ == '__main__':
ENVIRONMENT_DEBUG = os.environ.get("APP_DEBUG", True)
ENVIRONMENT_PORT = os.environ.get("APP_PORT", 5000)
app.run(host='0.0.0.0', port=ENVIRONMENT_PORT, debug=ENVIRONMENT_DEBUG)
我试过的:
根据这个 answer,我将 app\Dockerfile
中的 CMD
更改为:
CMD [ "gunicorn", "-w", "4", "--bind", "0.0.0.0:5000", "wsgi"]
为此:
CMD [ "gunicorn", "-w", "4", "--bind", "0.0.0.0:5000", "/home/project_root/app/wsgi.py"]
但是当 运行ning docker-compose up -d
时,我仍然在顶部遇到相同的错误。我是 docker 的新手,所以完全不知道是什么导致了错误,我到底是什么做错了。有人请帮忙。
更新:
根据这个 和下面的答案,我尝试 运行 这样的命令:
CMD [ "gunicorn", "-w", "4", "--bind", "0.0.0.0:5000", "wsgi:app"]
仍然出现同样的错误。
如果我将 wsgi.py
移动到 app
文件夹之外,如下所示:
home
-project_root
-docker-compose.yml
-wsgi.py
--app
---all other files
---Dockerfile
---requirements.txt
也有同样的错误。
更新二:
我像下面这样更改 CMD:
CMD [ "gunicorn", "-w", "4", "--bind", "0.0.0.0:5000", "/var/www/app/wsgi.py"]
现在我得到这样的错误:
flask | ModuleNotFoundError: No module named '/var/www/app/wsgi.py'
你应该指向wsgi.app吗? 运行 这个命令能解决问题吗?
CMD [ "gunicorn", "-w", "4", "--bind", "0.0.0.0:5000", "wsgi:app"]
你能试试你的项目结构是这样的吗
home
-project_root
-docker-compose.yml
-wsgi.py
-Dockerfile
-requirements.txt
--app
---all other files
而你的Dockerfile
要像这样
FROM python:3.6.8-alpine3.9
WORKDIR /var/www/
ADD . /var/www/
RUN apk add --no-cache build-base libffi-dev openssl-dev ncurses-dev
RUN python -m pip install --upgrade pip
RUN pip install -r requirements.txt // gunicorn is install inside requirements.txt
EXPOSE 5000
CMD [ "gunicorn", "-w", "4", "--bind", "0.0.0.0:5000", "wsgi:app"]
我现在使用 Nginx 和 Docker 部署我的 Flask 应用程序。我的 docker 已经启动并且 运行 正在运行,但是当我去其中一个端点时我总是得到 502 Bad Gateway nginx
。
所以我删除所有 docker 并重新构建它,然后我得到这个错误,当 运行ning docker-compose up -d
:
[2020-03-09 15:00:11 +0000] [1] [INFO] Starting gunicorn 19.7.1
flask | [2020-03-09 15:00:11 +0000] [1] [INFO] Listening at: http://0.0.0.0:5000 (1)
flask | [2020-03-09 15:00:11 +0000] [1] [INFO] Using worker: sync
flask | [2020-03-09 15:00:11 +0000] [7] [INFO] Booting worker with pid: 7
flask | [2020-03-09 15:00:11 +0000] [7] [ERROR] Exception in worker process
flask | Traceback (most recent call last):
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/arbiter.py", line 578, in spawn_worker
flask | worker.init_process()
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/workers/base.py", line 126, in init_process
flask | self.load_wsgi()
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/workers/base.py", line 135, in load_wsgi
flask | self.wsgi = self.app.wsgi()
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/app/base.py", line 67, in wsgi
flask | self.callable = self.load()
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 65, in load
flask | return self.load_wsgiapp()
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
flask | return util.import_app(self.app_uri)
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/util.py", line 352, in import_app
flask | __import__(module)
flask | ModuleNotFoundError: No module named 'wsgi'
flask | [2020-03-09 15:00:11 +0000] [7] [INFO] Worker exiting (pid: 7)
flask | [2020-03-09 15:00:11 +0000] [8] [INFO] Booting worker with pid: 8
flask | [2020-03-09 15:00:11 +0000] [8] [ERROR] Exception in worker process
flask | Traceback (most recent call last):
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/arbiter.py", line 578, in spawn_worker
flask | worker.init_process()
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/workers/base.py", line 126, in init_process
flask | self.load_wsgi()
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/workers/base.py", line 135, in load_wsgi
flask | self.wsgi = self.app.wsgi()
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/app/base.py", line 67, in wsgi
flask | self.callable = self.load()
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 65, in load
flask | return self.load_wsgiapp()
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
flask | return util.import_app(self.app_uri)
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/util.py", line 352, in import_app
flask | __import__(module)
flask | ModuleNotFoundError: No module named 'wsgi'
flask | [2020-03-09 15:00:11 +0000] [8] [INFO] Worker exiting (pid: 8)
flask | [2020-03-09 15:00:11 +0000] [9] [INFO] Booting worker with pid: 9
flask | [2020-03-09 15:00:11 +0000] [9] [ERROR] Exception in worker process
flask | Traceback (most recent call last):
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/arbiter.py", line 578, in spawn_worker
flask | worker.init_process()
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/workers/base.py", line 126, in init_process
flask | self.load_wsgi()
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/workers/base.py", line 135, in load_wsgi
flask | self.wsgi = self.app.wsgi()
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/app/base.py", line 67, in wsgi
flask | self.callable = self.load()
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 65, in load
flask | return self.load_wsgiapp()
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
flask | return util.import_app(self.app_uri)
flask | File "/usr/local/lib/python3.6/site-packages/gunicorn/util.py", line 352, in import_app
flask | __import__(module)
flask | ModuleNotFoundError: No module named 'wsgi'
flask | [2020-03-09 15:00:11 +0000] [9] [INFO] Worker exiting (pid: 9)
flask | [2020-03-09 15:00:11 +0000] [1] [INFO] Shutting down: Master
flask | [2020-03-09 15:00:11 +0000] [1] [INFO] Reason: Worker failed to boot.
这意味着我的 Flask 服务构建失败,因此 Nginx 代理的应用程序服务器不是 运行ning,根据这个 answer。但我不知道要去哪里错了。
这是我的 docker-compose.yml
:
version: '3'
services:
flask:
build:
context: app
dockerfile: Dockerfile
container_name: flask
image: digitalocean.com/flask-python:3.6
restart: unless-stopped
environment:
APP_ENV: "prod"
APP_DEBUG: "False"
APP_PORT: 5000
service_2:
...
service_3:
...
这是我的app/Dockerfile
FROM python:3.6.8-alpine3.9
WORKDIR /var/www/
ADD . /var/www/
RUN apk add --no-cache build-base libffi-dev openssl-dev ncurses-dev
RUN python -m pip install --upgrade pip
RUN pip install -r requirements.txt // gunicorn is install inside requirements.txt
EXPOSE 5000
CMD [ "gunicorn", "-w", "4", "--bind", "0.0.0.0:5000", "wsgi"]
这是我的项目目录:
home
-project_root
-docker-compose.yml
--app
---all other files
---Dockerfile
---requirements.txt
---wsgi.py
这是我的 wsgi.py
:
import os
from app import create_app
from flask_cors import CORS
app = create_app()
cors = CORS(app)
if __name__ == '__main__':
ENVIRONMENT_DEBUG = os.environ.get("APP_DEBUG", True)
ENVIRONMENT_PORT = os.environ.get("APP_PORT", 5000)
app.run(host='0.0.0.0', port=ENVIRONMENT_PORT, debug=ENVIRONMENT_DEBUG)
我试过的:
根据这个 answer,我将 app\Dockerfile
中的 CMD
更改为:
CMD [ "gunicorn", "-w", "4", "--bind", "0.0.0.0:5000", "wsgi"]
为此:
CMD [ "gunicorn", "-w", "4", "--bind", "0.0.0.0:5000", "/home/project_root/app/wsgi.py"]
但是当 运行ning docker-compose up -d
时,我仍然在顶部遇到相同的错误。我是 docker 的新手,所以完全不知道是什么导致了错误,我到底是什么做错了。有人请帮忙。
更新:
根据这个
CMD [ "gunicorn", "-w", "4", "--bind", "0.0.0.0:5000", "wsgi:app"]
仍然出现同样的错误。
如果我将 wsgi.py
移动到 app
文件夹之外,如下所示:
home
-project_root
-docker-compose.yml
-wsgi.py
--app
---all other files
---Dockerfile
---requirements.txt
也有同样的错误。
更新二:
我像下面这样更改 CMD:
CMD [ "gunicorn", "-w", "4", "--bind", "0.0.0.0:5000", "/var/www/app/wsgi.py"]
现在我得到这样的错误:
flask | ModuleNotFoundError: No module named '/var/www/app/wsgi.py'
你应该指向wsgi.app吗? 运行 这个命令能解决问题吗?
CMD [ "gunicorn", "-w", "4", "--bind", "0.0.0.0:5000", "wsgi:app"]
你能试试你的项目结构是这样的吗
home
-project_root
-docker-compose.yml
-wsgi.py
-Dockerfile
-requirements.txt
--app
---all other files
而你的Dockerfile
要像这样
FROM python:3.6.8-alpine3.9
WORKDIR /var/www/
ADD . /var/www/
RUN apk add --no-cache build-base libffi-dev openssl-dev ncurses-dev
RUN python -m pip install --upgrade pip
RUN pip install -r requirements.txt // gunicorn is install inside requirements.txt
EXPOSE 5000
CMD [ "gunicorn", "-w", "4", "--bind", "0.0.0.0:5000", "wsgi:app"]