You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署webapp保留/x/y/z目录结构解决util模块导入报错

问题原因

报错本质是Python模块搜索路径配置错误:

  • 原Dockerfile执行COPY . .时未提前指定工作目录,默认将本地项目根目录下的x、util文件夹复制到容器的/根目录下
  • 后续将工作目录切换到/x/y/z后,Python运行时只会从当前工作目录、PYTHONPATH配置的路径下查找顶层模块
  • 原配置中PYTHONPATH添加的/home/site/wwwroot/路径在当前镜像中不存在,/x/y/z目录下也没有util文件夹,自然无法找到util模块

之前测试将app.py移动到/x目录、修改WORKDIR为/x后能正常运行,本质是因为此时工作目录和util目录的层级匹配,只要根路径在搜索范围内就能定位到模块,和代码本身无关。

修复方案

不需要改动原有/x/y/z目录结构,也不需要移动app.py,仅修改Dockerfile的路径配置即可。推荐按容器最佳实践调整配置,避免文件散落在容器根目录造成污染,调整后的完整Dockerfile如下:

FROM felipederodrigues/python37withpyodbc:v1

# 先设置统一的项目根工作目录
WORKDIR /app
# 复制项目所有文件到/app目录,此时x、util文件夹均处于/app路径下
COPY . .

# 切换工作目录到app.py所在的/x/y/z路径
WORKDIR /x/y/z

# 安装依赖包
RUN pip install --upgrade pip && pip install gunicorn eventlet==0.30.2
RUN pip install --no-cache-dir -r requirements.txt

# 将项目根目录/app加入Python模块搜索路径,删除原配置中不存在的无效路径
ENV PYTHONPATH "${PYTHONPATH}:/app"

EXPOSE 8050

# 启动gunicorn服务
CMD gunicorn -b :8050 -k eventlet -w 1 app:server

如果不想调整原有COPY逻辑,也可以直接修改原Dockerfile中的PYTHONPATH配置行,将容器根目录加入搜索路径:

ENV PYTHONPATH "${PYTHONPATH}:/"

这种写法也能解决报错,但将项目文件直接放在容器根目录不符合容器规范,不推荐长期使用。

验证说明

修改配置后重新构建镜像启动容器,Python模块搜索路径会包含项目根目录,执行from util.database import create_database_connection导入语句时,就能正常定位到根目录下的util模块,不会再抛出ModuleNotFoundError: No module named 'util'错误。

内容的提问来源于stack exchange,提问作者robbertvdh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 03:36:16