运行 在 Docker 时 Flask 应用导入错误

Flask app ImportError when running on Docker

我有一个基本的 Flask Web 应用程序,我想在 Docker 容器中设置它。以下是我的 Docker 文件设置:

FROM python:3.8-alpine

WORKDIR /mydir

COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt

COPY . .
ENV FLASK_APP="app.py"

CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "-p", "8080"]

使用

构建docker文件
mydir % docker build -t geode:latest .      

但是当我尝试通过 Docker 运行 网络应用程序时,会发生这种情况:

mydir % docker run -p 8080:8080 geode:latest
 * Serving Flask app 'app.py' (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
Usage: python -m flask run [OPTIONS]
Try 'python -m flask run --help' for help.

Error: While importing 'app', an ImportError was raised.

但是,我可以 运行 使用以下

在本地使用网络应用程序
mydir % python3 -m flask run --host=0.0.0.0 -p 8080

所以我不确定为什么当我通过 docker 运行 时收到“ImportError”,但当我自己 运行 命令时却没有。

可能flask找不到导入app变量的源文件,或者导入变量的源文件中不存在名为app的变量

查看此 link 了解如何启动 flaks 应用程序。

如果包含app变量的变量或文件的名称与标准不同,那么可以在Dockerfile里面设置FLASK_APP环境变量来告诉flask在哪里得到它需要的东西。

ENV FLASK_APP=<PATH_TO_APP.PY>:<APP_VARIABLE_NAME>

我不知道为什么但是重建 Docker 容器允许它 运行 正确...也许我在构建后更改的 Docker 文件中有错字容器?不确定,但我正在复制我用于另一个应用程序的结构 - 原来的工作,但没有。所以某处有错字,重建容器成功了。