我的 Docker 映像未运行 Flask 的问题

问题描述 投票:0回答:1

我正在尝试构建 Flask docker 镜像。我收到错误:

zsh:找不到命令:flask

我按照这个旧教程来让事情正常运转。 https://medium.com/@rokinmaharjan/running-a-flask-application-in-docker-80191791e143

为了学习如何使用 Docker 启动 Flask 网站,我让一切变得简单。我的 Docker 镜像应该只打开一个 Hello world 首页。

我的例子.py:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
   return 'Hello World'

if __name__ == '__main__':
   app.run()

我的 Dockerfile:

FROM ubuntu:16.04
RUN apt-get update -y
RUN apt-get install python -y
RUN apt-get install python-pip -y
RUN pip install flask
COPY example.py /home/example.py
ENTRYPOINT FLASK_APP=/home/example.py flask run --host=0.0.0.0

我跑步

sudo docker build 。 -t 烧瓶应用程序

建立形象。

当我跑步时

docker run -p 8080:5000 烧瓶应用程序

我收到错误:

zsh:找不到命令:flask

我在这里缺少什么?

docker flask
1个回答
1
投票

嗯,确实你正在遵循一个非常古老的教程。

我不会详细讨论在没有 WSGI 服务器的情况下直接使用 Flask 是否是你应该做的事情,所以我只关注你的问题。

简洁的答案:你的

pip
中没有通过
PATH
安装的模块,所以你当然不能调用它们。 Flask 就是这个模块之一。

扩展答案:继续阅读。


首先,使用该基础映像,您将下载旧版本的 Python 和

pip
,其次:您不需要成熟的操作系统(即 ubuntu)来运行 Flask 应用程序。

已经有像

python:3.9.10-slim-buster
这样的 Python 基础镜像,与 Ubuntu 16 的旧镜像相比,它的依赖性和可能的漏洞要少得多。

FROM python:3.9.10-slim-buster

其次,你不应该依赖基础镜像上的内容,你应该为你的应用程序使用一个环境(

venv
),你可以在其中安装 Flask 以及应用程序的任何其他依赖项,这些依赖项应该列在
requirements.txt
。此外,您还应该选择要将代码放置在哪个工作目录中(
/usr/src/app
通常是一个常见的位置)。

指出默认情况下暴露哪个端口也是一件好事(尽管每个人都知道 Flask 暴露端口 5000)。

FROM python:3.9.10-slim-buster

WORKDIR /usr/src/app

ENV VIRTUAL_ENV=/opt/venv
RUN python3 -m venv $VIRTUAL_ENV
ENV PATH="$VIRTUAL_ENV/bin:$PATH"

RUN python3 -m pip install flask
COPY example.py .
ENTRYPOINT FLASK_APP=example flask run --host=0.0.0.0

EXPOSE 5000

结果:

❯ docker run -p 8080:5000 flask-app
 * Serving Flask app 'example' (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
 * Running on all addresses.
   WARNING: This is a development server. Do not use it in a production deployment.
 * Running on http://172.17.0.2:5000/ (Press CTRL+C to quit)
© www.soinside.com 2019 - 2024. All rights reserved.