运行 在 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 文件中有错字容器?不确定,但我正在复制我用于另一个应用程序的结构 - 原来的工作,但没有。所以某处有错字,重建容器成功了。
我有一个基本的 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 文件中有错字容器?不确定,但我正在复制我用于另一个应用程序的结构 - 原来的工作,但没有。所以某处有错字,重建容器成功了。