Docker&x2B;python无法导入自定义模块
我在docker中运行python项目时遇到问题。它无法从自定义包导入自定义模块。 脚本在docker外部运行得非常好,奇怪的是,如果我执行到容器中并手动运行它,它也可以运行 目录结构: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
├── 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由于某种原因没有合作。