繁体   English   中英

Flask Docker 容器问题

[英]Flask Docker Container Issues

我有几个问题希望有人能在这里回答。 我意识到我有知识空白,我希望这里有人可以填补它,或者至少为我指明正确的方向。

我已经构建了一个 Flask API,我可以在 Z3D945423F8E9496C429AZ 上的 Docker 容器中运行它。 为了创建 Swagger API 文档,我添加到我的 Flask 应用程序中:

from flask_swagger_ui import get_swaggerui_blueprint

我没有继续前进,而是停止了 Docker 并再次运行它,正如预期的那样,它导致“502 网关错误”。 在检查 Docker 日志后,我注意到:

ModuleNotFoundError: No module named 'flask_swagger_ui'

我理解这个问题,因为我需要在我的 docker 中添加这个依赖项。 我将以下代码添加到我的“requirements.txt”文件中:flask_swagger_ui==3.36.0。

然而,这并没有改变任何东西,我仍然收到同样的错误。 我尝试将模块直接添加到通过此代码创建的 Dockerfile 中,但这也不起作用:

RUN pip install flask_swagger_ui

执行其中一项或两项操作会导致 502 网关错误。 我尝试将其他几个模块添加到我的应用程序中,例如 Pandas 和 Sklearn,但它们会导致相同的错误。 我无法对我的应用程序进行任何更改而不会获得 Bad Gateway。

为了找出问题所在,我删除了我所做的所有更改并将其恢复到我的“requiements.txt”中唯一依赖项是 Flask 2.0.1 的位置。 在测试 Docker 运行良好后,在 state 的混乱中,我删除了“start.sh”、“Dockerfile”和“requirements.txt”并将它们放入垃圾箱并重新启动 ZC5FD214CDD0D2B3B4272E73B0C。

令我困惑的是,Docker 工作正常,上面提到的所有文件都在垃圾箱中。 由于此时我完全迷失了,我再次添加了所有依赖项以查看它这次是否有效并陷入相同的 502 错误并且日志显示相同的问题。

那么我的问题是:

  1. 如何向我的应用程序添加依赖项?

  2. 我的 Docker 容器到底如何在垃圾箱中的 3 个必需文件后仍在运行? 我停止并再次重新启动 Docker,据我所知,它不应该工作。

  3. 从我的目录中的 requirements.txt 文件中删除“Flask 2.0.1”并重新启动我的 docker 根本不会影响我的 Docker 应用程序,它运行良好。 怎么了?

这是我的 Dockerfile:

FROM tiangolo/uwsgi-nginx-flask:python3.8-alpine3.7
RUN apk --update add bash nano
RUN pip install pandas flask_swagger_ui
ENV STATIC_URL /static
ENV STATIC_PATH /home/faraz/python_docker/TestApp/app/static
COPY ./requirements.txt /home/faraz/python_docker/TestApp/requirements.txt
RUN pip install -r requirements.txt

这是我的 requirements.txt:

Flask==2.0.1
flask_swagger_ui==3.36.0
pandas==1.2.4

最后,我的“start.sh”:

#!/bin/bash
app="docker.test"
docker build -t ${app} .
docker run -d -p 56733:80 \
  --name=${app} \
  -v $PWD:/app ${app}

我在构建 API 时发布了另一个问题,下面的链接将带您到它: 不允许的方法 请求的 URL 不允许该方法。 405 错误

根据其中一条评论的建议:这是 Github 存储库:

https://github.com/frazali32/Docker-Flask-API

我找到了我的问题的答案。 正如我所怀疑的,这只不过是知识鸿沟。 这个概念在下面的论坛中得到了很好的解释:

在文件更改时重建 Docker 容器

基本上,在本地删除或更改某些内容对容器没有任何影响,除非您将其安装为卷或不重建。 就我而言,我删除了第一次尝试创建的 Docker 映像,构建了另一个映像并重新启动了 Docker。 现在可以了!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM