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

Dockerfile运行容器触发ModuleNotFoundError,无法加载hello模块求解决

问题分析与解决方案

你的问题根源非常清晰:Docker容器内部没有你的代码文件——你只在Dockerfile里安装了Python和Gunicorn,但完全没把本地的hello.py、requirements.txt等文件复制到容器中,Gunicorn找不到hello模块是必然结果。另外你设置的PYTHONPATH也完全无效,因为容器里对应的路径下根本没有任何代码。

修改后的Dockerfile

FROM python:3.6.7

# 设置容器内的工作目录为/app,后续操作默认在此路径下执行
WORKDIR /app

# 先复制依赖文件,利用Docker缓存优化构建速度
COPY requirements.txt .
RUN pip install gunicorn -r requirements.txt

# 将本地当前目录的所有文件复制到容器的/app目录下
COPY . .

EXPOSE 5000

# 直接运行gunicorn,此时工作目录是代码所在的/app,Python可直接找到hello模块
CMD ["gunicorn", "--bind", "0.0.0.0:5000", "hello:app"]

关键修改说明

  1. 添加WORKDIR /app:指定容器内的工作目录,让后续的复制、命令执行都在统一路径下,避免路径混乱。
  2. 添加COPY指令:
    • 先复制requirements.txt是Docker构建的最佳实践——如果依赖没有变化,这一层会被缓存,不需要每次修改代码都重新安装依赖。
    • COPY . .把本地和Dockerfile同目录的所有文件(包括hello.py、__init__.py等)全部复制到容器的/app目录下,让容器里终于有了你的代码文件。
  3. 简化CMD命令:因为工作目录已经是代码所在的/app,Python默认会把当前工作目录加入模块搜索路径,所以不需要额外设置PYTHONPATH,直接运行gunicorn hello:app即可。

验证步骤

  1. 用修改后的Dockerfile重新构建镜像:
    docker build -t <your-image-name> .
    
  2. 运行容器:
    docker run -p 5000:5000 <your-image-name>
    

此时Gunicorn应该能正常加载hello:app,不会再出现ModuleNotFoundError了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:49:38