【发布时间】:2021-06-01 04:28:41
【问题描述】:
我有几个问题希望有人能在这里回答。我意识到我有知识空白,我希望这里有人可以填补它,或者至少为我指明正确的方向。
我已经构建了一个 Flask API,我可以在 Ubuntu OS 上的 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运行正常后,在迷茫的状态下,我删除了“start.sh”、“Dockerfile”和“requirements.txt”并放入垃圾箱并重启了Docker。
令我困惑的是,Docker 运行良好!上面提到的所有文件都在垃圾桶里!由于此时我完全迷失了方向,所以我再次添加了所有依赖项以查看它这次是否有效,并遇到了相同的 502 错误,并且日志显示了相同的问题。
那么我的问题是:
-
如何向我的应用程序添加依赖项?
-
我的 Docker 容器在垃圾箱中的 3 个必需文件之后仍然运行到底是怎么回事?我停止并再次重新启动了 Docker,据我所知,它应该不起作用。
-
从我的目录中的 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 时发布了另一个问题,下面的链接会将您带到它:Method Not Allowed The method is not allowed for the requested URL. 405 Error
根据其中一位 cmets 的建议:这是 Github 存储库:
【问题讨论】:
-
您能分享您的 github 仓库,以便我们提供帮助
-
@Sreevardhan Reddy 谢谢你的建议。我已经编辑了问题并添加了一个存储库。请帮忙。
标签: python docker flask docker-compose