将主机目录复制到DockerFile中的容器时发生ModuleNotFound错误

将主机目录复制到DockerFile中的容器时发生ModuleNotFound错误,docker,Docker,我想把主机上的目录添加到docker容器中,真是疯了。当使用docker compose up-build构建容器时,它似乎添加得很好,但是当我尝试访问app.py文件中的模块时,我得到了ModuleNotFoundError 我的DockerFile包含以下内容: FROM python:3.7-alpine RUN apk update && \ apk add --virtual build-deps gcc musl-dev && \ a

我想把主机上的目录添加到docker容器中,真是疯了。当使用docker compose up-build构建容器时,它似乎添加得很好,但是当我尝试访问app.py文件中的模块时,我得到了ModuleNotFoundError

我的DockerFile包含以下内容:

FROM python:3.7-alpine

RUN apk update && \
    apk add --virtual build-deps gcc musl-dev && \
    apk add --no-cache postgresql-dev && \
    apk add alsa-lib-dev && \
    apk add pulseaudio-dev && \
    apk add postgresql-dev && \
    apk add ffmpeg-dev && \    
    apk add ffmpeg && \          
    rm -rf /var/cache/apk/*

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

ADD /common/testmodel /scraper/testmodel

WORKDIR home/scraper/

ENTRYPOINT ["python3", "-u", "app.py"]
CMD gunicorn -b 0.0.0.0:5000 --access-logfile - "app:app"
-common
    -testmodel
        -test.py
-scraper
    -DockerFile
    -requirements
-docker-compose.yml
然后,在构建图像时,日志显示:

Step 6/9 : ADD /common/testmodel home/scraper/testmodel
---> a7b27854d751
我的项目结构如下所示:

FROM python:3.7-alpine

RUN apk update && \
    apk add --virtual build-deps gcc musl-dev && \
    apk add --no-cache postgresql-dev && \
    apk add alsa-lib-dev && \
    apk add pulseaudio-dev && \
    apk add postgresql-dev && \
    apk add ffmpeg-dev && \    
    apk add ffmpeg && \          
    rm -rf /var/cache/apk/*

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

ADD /common/testmodel /scraper/testmodel

WORKDIR home/scraper/

ENTRYPOINT ["python3", "-u", "app.py"]
CMD gunicorn -b 0.0.0.0:5000 --access-logfile - "app:app"
-common
    -testmodel
        -test.py
-scraper
    -DockerFile
    -requirements
-docker-compose.yml
但是在我的app.py文件中,当我从testmodel.test导入TestClass运行时,我得到ModuleNotFoundError:没有名为“testmodel”的模块


任何对这个问题的帮助都是非常感谢的,因为这是我一天中所占的比我想象的要大得多的时间。非常感谢。

我可能遗漏了一些上下文,但我认为您有几个问题:

你复制/刮刀。。。和添加/常见…-这些目录是否挂在本地计算机的根目录上? 您可以在复制和添加之后设置WORKDIR,但通常情况下,虽然不是必需的,但您可以先将其设置为默认目的地,然后再进行复制。并添加一些内容。还有这些目的地。请参考您的工作指南 您使用/home/scraper作为您的WORKDIR,但不复制并将文件添加到其中。此时它将为空。 您的入口点引用app.py,但您的文件名为test.py 一个有用的调试工具是将外壳封装到容器中,例如检查目录结构以确认其符合预期。假设您的图像名为scraper,您可以:

码头工人建造\ -标签=刮刀\ -文件=scraper/Dockerfile\ . 别忘了经期- 阿尔卑斯山的贝壳被称为火山灰:

码头工人赛跑\ -互动的\ -tty\ 刮刀:最新的灰烬 或者,如果Dockerfile具有入口点,则使用以下命令覆盖它:

码头工人赛跑\ -互动的\ -tty\ -入口点=灰烬\ 刮刀:最新 然后可以浏览容器的目录结构:

您将默认为/home/ir:

/主/刮板ls-l 总数0 您可以使用以下方法检查/刮片:

/主/刮板apk安装树 /主/刮刀树/刮刀 /刮刀 └── 测试模型 └── test.py 1个目录,1个文件 我不完全清楚什么是适合您的正确解决方案,但我希望这有助于您取得进展:

来自python:3.7-1 运行apk更新&&\ apk添加-虚拟构建部门gcc musl开发和\ apk添加-无缓存postgresql开发和\ apk添加alsa库开发和\ apk添加pulseaudio开发和\ apk添加postgresql开发和\ apk添加ffmpeg开发和\ apk添加ffmpeg&&\ rm-rf/var/cache/apk/* WORKDIR home/scraper/ 复制scraper/requirements.txt。 运行pip安装-r requirements.txt 添加公共/测试模型。 入口点[python3,-u,test.py] CMD gunicorn-b 0.0.0.0:5000-访问日志文件-测试:应用程序
这有帮助!我不知道我可以用shell检查docker容器的项目结构。它似乎是WORKDIR home/scraper/COPY scraper/requirements.txt。运行pip安装-r requirements.txt添加公共/testmodel。他成功了。非常感谢Daz!