gpt4 book ai didi

python - Docker 将目录添加到容器以运行 Flask 应用程序

转载 作者:行者123 更新时间:2023-12-05 07:15:14 25 4
gpt4 key购买 nike

我的文件夹结构如下所示:

 +--mlservice
| __init__.py
| production
| requirements.txt
| venv
| DockerFile

production 是目录,init.py 是主脚本。

这是我的 DockerFile。

FROM python:3.7

ENV FLASK_APP "mlservice/__init__.py"

RUN mkdir /app
WORKDIR /app

# Install the dependencies specified in requirements file
COPY requirements.txt /app/
RUN pip install -r requirements.txt

# Copy all directories and files from host to container
COPY . /app
COPY production /app/mlservice/production

EXPOSE 5000

# Run the application; default command to run when container starts
CMD flask run --host=0.0.0.0

在命令提示符下运行时,我的应用程序在我的虚拟环境中运行良好,但是当我尝试在 Docker 容器中运行它时,出现以下错误:

Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/flask/cli.py", line 240, in locate_app
__import__(module_name)
File "/app/__init__.py", line 18, in <module>
from production.dataprocessing import DataProcessing
ModuleNotFoundError: No module named 'production'

我已经尝试了所有不同的方法来将我的目录复制到容器中,但都无济于事。我认为相对导入没有问题,因为在命令提示符下运行时成功找到了 production 文件夹。我认为问题在于我如何将 mlservice 目录复制到容器中。谁能看出我在这里做错了什么?

最佳答案

我可能会将您的 requirement.txt 移动到 production/ 目录中,然后执行如下操作:

FROM python:3.7

ENV FLASK_APP "/app/__init__.py"

COPY ./production /app/production
COPY ./__init__.py /app/__init__.py

WORKDIR /app

# Install the dependencies specified in requirements file
RUN pip install -r production/requirements.txt

EXPOSE 5000

# Run the application; default command to run when container starts
CMD flask run --host=0.0.0.0

这有额外的好处:

  • 不将 venv 文件夹复制到图像中
  • 不将 Dockerfile 复制到图像中。

您可能可以取消将 __init__.py 本身复制到容器中的第四行,方法是将其也放入生产目录中,但这取决于代码的外观。

关于python - Docker 将目录添加到容器以运行 Flask 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59636985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com