【问题标题】:After create Docker Image; docker run gives ModuleNotFoundError创建 Docker 镜像后; docker run 给出 ModuleNotFoundError
【发布时间】:2020-05-26 05:50:04
【问题描述】:

嗨,我有一个 python 项目包含以下结构

在我的项目目录中

$ ls
models main.py Dockerfile

models 是一个目录,

$ cd models
$ ls
model.py utils.py evaluation __init__.py

在我的main.py 文件中,我有类似

from models import model

在我的model.py 文件中,我有

from .utils import *
from evaluation import somefile

我正在尝试创建一个 docker 映像,并按照教程使用以下 Dockerfile

FROM python:3.7.2-slim


COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt

COPY main.py /
CMD [ "python", "./main.py" ]

其中requirements.txt 只需安装numpy 等。

运行docker build -t test 很好,可以相应地创建东西。但是当我运行docker run test 时。它给出了错误

Traceback (most recent call last):
  File "./main.py", line 1, in <module>
    from models import model
ModuleNotFoundError: No module named 'models'

我假设在model.py 处执行from .utils import *from evaluation import somefile 时也会出现错误,即使上述错误已解决。

我想我不明白依赖关系在 Docker 中是如何工作的,也没有正确解决依赖关系。这段代码在终端中以$ python main.py等python方式运行时可以正常工作。

我在这部分找不到任何文件。有什么帮助吗?谢谢

【问题讨论】:

  • 可能是你的文件结构造成的。stackoverflow.com/questions/60603593/…我最近也遇到了同样的问题
  • @MarkMeyer 您好,感谢您的回复。你的意思是,如果我的main.py 调用/导入了其中任何一个,我需要复制项目目录中的所有文件/目录?
  • 是的,您需要通过复制或添加目录作为挂载点来为 docker 提供您想要使用的文件。此外,进口似乎不正确。这在容器外有效吗?
  • @MarkMeyer;是的,只要在终端中运行$python main.py,它就可以正常工作

标签: python docker


【解决方案1】:

错误是您在Dockerfile 中执行COPY main.py / 的位置。

您只是在复制 main.py 文件。

相反,将该行替换为

COPY . .

这也会移动其他文件夹和文件。

【讨论】:

  • 谢谢!是的;这就是问题
猜你喜欢
  • 2020-08-10
  • 2019-08-03
  • 1970-01-01
  • 1970-01-01
  • 2022-08-03
  • 1970-01-01
  • 1970-01-01
  • 2017-11-04
  • 2020-08-30
相关资源
最近更新 更多