Docker&x2B;python无法导入自定义模块

Docker&x2B;python无法导入自定义模块,python,docker,docker-compose,Python,Docker,Docker Compose,我在docker中运行python项目时遇到问题。它无法从自定义包导入自定义模块。 脚本在docker外部运行得非常好,奇怪的是,如果我执行到容器中并手动运行它,它也可以运行 目录结构: ├── main.py ├── docker-compose.yml ├── Dockerfile ├── lib │ ├── __init.py__ │ └── config.py 我的dockerfile: FROM ubuntu WORKDIR /app ENV TZ=Europe/Vien

我在docker中运行python项目时遇到问题。它无法从自定义包导入自定义模块。 脚本在docker外部运行得非常好,奇怪的是,如果我执行到容器中并手动运行它,它也可以运行

目录结构:

├── main.py
├── docker-compose.yml
├── Dockerfile
├── lib
│   ├── __init.py__
│   └── config.py
我的dockerfile:

FROM ubuntu

WORKDIR /app

ENV TZ=Europe/Vienna
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt update && apt install -y python3-pip python3.9 cron

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

COPY . .

RUN crontab /app/lib/project.cron

VOLUME /logs
VOLUME /tmp
VOLUME /app/lib

ENV PYTHONPATH=/app
CMD [ "python3", "main.py"]
docker compose:

version: '3'
services:
        project:
                restart: unless-stopped
                build:
                        context: .
                        dockerfile: Dockerfile
                environment:
                        [bunch of stuff needed by the project]
                volumes:
                        [logs and tmp]
                        - /host/path/to/lib/:/app/lib
以及main.py中的代码:

#!/usr/bin/env python3
...
import lib.config as config
脚本在docker外部运行或手动执行时运行,但启动容器时,输出为:

File "main.py", line 6, in <module>
    import lib.config as config
ModuleNotFoundError: No module named 'lib.config'
文件“main.py”,第6行,在
将lib.config导入为config
ModuleNotFoundError:没有名为'lib.config'的模块
我能找到的所有其他相关帖子要么建议设置PYTHONPATH env变量,要么缺少一个uu init.py_uu


有人有什么建议吗?

如果您手动跳入容器并运行它,会发生什么?考虑容器内的显示文件结构吗?stackoverflow.com/a/11158224说,还有一些对文件头的调整,以扩展从相对路径加载libs的方法。如果我手动跳入容器,我可以运行它,没有问题,这就是我对此感到困惑的主要原因。只有当容器尝试使用上面的CMD启动时,才会运行此操作。文件结构也在帖子中列出:dir结构都在
/app
目录中。Compose
卷中有什么内容:
?从Dockerfile中删除
指令是否会产生影响(您是否从
/app/lib
上装载的卷中获取了旧的和不正确的内容,而不是图像中的内容)?就是这样!我已经更新了这篇文章,提供了更多关于这些卷的细节。删除/app/lib指令修复了这个问题,不过现在我需要弄清楚它为什么不起作用。tmp和日志卷按预期工作(应用程序将所有内容都放在它应该放的地方),但是/app/lib由于某种原因没有合作。