我的 Docker 图片有问题,不是 运行 Flask
Problem with my Docker image not running Flask
我正在尝试构建 Flask docker 映像。我收到错误:
zsh: command not found: flask
我按照这个旧教程进行操作。 https://medium.com/@rokinmaharjan/running-a-flask-application-in-docker-80191791e143
为了学习如何使用 Docker 启动 Flask 网站,我已将所有内容简化。我的 Docker 图片应该只打开一个 Hello world 首页。
我的example.py:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World'
if __name__ == '__main__':
app.run()
我的Docker文件:
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 flask-app
构建图像。
当我运行
docker run -p 8080:5000 flask-app
我收到错误:
zsh: command not found: flask
我在这里错过了什么?
好吧,您确实在学习一个非常古老的教程。
我不打算详细说明在没有 WSGI 服务器的情况下直接使用 Flask 是否是你应该做的事情,所以我只关注你的问题。
简明回答:你的PATH
中没有pip
安装的模块,所以你当然不能调用它们。 Flask 是此模块之一。
扩展答案:继续阅读。
首先,使用该基础映像,您正在下载 Python 和 pip
的旧版本,其次:您不需要完全成熟的操作系统来 运行一个Flask应用程序。已经有 Python 的基础镜像,例如 python:3.9.10-slim-buster
,与来自 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)
我正在尝试构建 Flask docker 映像。我收到错误:
zsh: command not found: flask
我按照这个旧教程进行操作。 https://medium.com/@rokinmaharjan/running-a-flask-application-in-docker-80191791e143
为了学习如何使用 Docker 启动 Flask 网站,我已将所有内容简化。我的 Docker 图片应该只打开一个 Hello world 首页。
我的example.py:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World'
if __name__ == '__main__':
app.run()
我的Docker文件:
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 flask-app
构建图像。
当我运行
docker run -p 8080:5000 flask-app
我收到错误:
zsh: command not found: flask
我在这里错过了什么?
好吧,您确实在学习一个非常古老的教程。
我不打算详细说明在没有 WSGI 服务器的情况下直接使用 Flask 是否是你应该做的事情,所以我只关注你的问题。
简明回答:你的PATH
中没有pip
安装的模块,所以你当然不能调用它们。 Flask 是此模块之一。
扩展答案:继续阅读。
首先,使用该基础映像,您正在下载 Python 和 pip
的旧版本,其次:您不需要完全成熟的操作系统来 运行一个Flask应用程序。已经有 Python 的基础镜像,例如 python:3.9.10-slim-buster
,与来自 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)