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

标签 python docker flask

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

 +--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/

相关文章:

docker - Ansible:如何使用动态键名设置 docker 容器标签?

docker - Kubernetes上的GitLab CE-执行错误在gitlab/ssh上运行

python - 在 Google Cloud Composer 中浏览 DAG 任务信息时,Airflow 抛出与时区相关的 TypeError

python - 如何遍历两个列表?

python - PyQt - 加载多个 UI 文件

python - Cassandra NoHostAvailable 错误

python-3.x - 在不违反 PEP-8 的情况下将 View 移动到单独的文件

python - plotly - 在 Plot.JS 中使用 graph_objects.Figure 轨迹

python - Beautiful Soup findAll 没有找到所有的

python - 如何对 "signal"感兴趣的子进程(无信号)?