【问题标题】:Why Docker does not find Flask Module为什么 Docker 找不到 Flask 模块
【发布时间】:2020-03-31 08:01:14
【问题描述】:

我已经创建了烧瓶应用程序并尝试将其 dockerize。它使用机器学习库,我在下载时遇到了一些问题,所以我的 Dockerfile 有点乱,但 Image 已成功创建。

from alpine:latest

RUN apk add --no-cache python3-dev \
&& pip3 install --upgrade pip

WORKDIR /app

COPY . /app

FROM python:3.5
RUN pip3 install gensim
RUN pip3 freeze > requirements.txt
RUN pip3 --no-cache-dir install -r requirements.txt

EXPOSE 5000

ENV PATH=/venv/bin:$PATH
ENV FLASK_APP /sentiment-service/__init__.py

CMD ["python","-m","flask", "run", "--host", "0.0.0.0", "--port", "5000"]

当我尝试时: docker run my_app:latest 我明白了

/usr/local/bin/python: No module named flask

当然,我的 requirements.txt 文件中有 Flask==1.1.1。 感谢您的帮助!

【问题讨论】:

  • 为什么有两条FROM 行?你为什么要覆盖requirements.txt
  • requirements.txtfreeze 之后的样子如何?可以加一下吗?
  • @KlausD。第二个 FROM 是因为我在下载 gensim 时遇到了一些问题,它修复了它。我正在覆盖 requirements.txt 因为我有一个错误,这个文件不存在。
  • 当你运行docker build时,它会在每一步之后打印出图像ID,所以你可以运行docker run --rm -it 0123456789ab sh来获得一个交互式调试shell,了解RUN pip3 freeze之前的图像状态线。那时你的形象是什么?为什么?
  • @danny 和 @David Maze 建议的同一个交互式 shell,运行 python 以检查这是您要使用的正确 python 版本的别名。

标签: python bash docker flask


【解决方案1】:

问题出在: RUN pip3 freeze > requirements.txt

bash 中的> 运算符会覆盖文件的内容。如果要附加到 requirements.txt,请考虑使用 >> 运算符:

RUN pip3 freeze >> requirements.txt

【讨论】:

  • 它不起作用。我的需求文件中有 Flask - 这是最奇怪的事情。
  • 您能运行一个包含您创建的映像的容器并检查那里的要求吗?在同一次检查中,您确定python 运行的是正确的python 版本吗?也许应该执行python3...
【解决方案2】:

谢谢大家。最后我重建了我的应用程序,简化了要求,排除了 alpine 并在我的 Dockerfile 中使用了 python 3.7。 我可以在本地运行应用程序,但 Docker 可能无法从路径中找到某些文件,或者从应用程序中得到一些其他错误,这就是它在启动后停止的原因。

【讨论】:

    猜你喜欢
    • 2023-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多