运行Docker镜像出现ImportError: Couldn't import Django错误如何解决
问题排查与解决方案
核心错误原因
- Dockerfile中依赖安装逻辑完全颠倒:你在干净的Python基础镜像中执行
RUN pip freeze > requirements.txt,会生成一个空白的依赖清单,直接覆盖了你本地自带Django的requirements.txt文件,最终执行依赖安装时没有安装任何包,自然找不到Django模块。 - Dockerfile存在语法错误:最后一行
CMD指令末尾缺少闭合的双引号和方括号,会导致镜像构建或启动异常。 - docker-compose.yml配置错误:
- web服务的
depends_on字段填写的依赖服务名为d,和实际定义的数据库服务名db不匹配,启动时无法正确关联依赖。 - web服务的挂载路径配置为
./:/code,和Dockerfile中定义的工作目录/app不一致,挂载后会覆盖容器内的工作目录内容,导致找不到代码和已安装的依赖。
- web服务的
修正后的配置
Dockerfile
FROM python:3.8-slim-buster ENV PYTHONUNBUFFERED 1 WORKDIR /app # 先复制依赖清单,利用Docker缓存减少重复构建耗时 COPY requirements.txt . RUN pip3 install -r requirements.txt # 依赖安装完成后再复制全量代码 COPY . . CMD ["python3","manage.py", "runserver","0.0.0.0:8000"]
docker-compose.yml
version: "3.9" services: db: image: postgres volumes: - ./data/db:/var/lib/postgresql/data environment: - POSTGRES_DB=postgres - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres web: build: . command: python manage.py runserver 0.0.0.0:8000 volumes: # 挂载路径和Dockerfile中定义的工作目录保持一致 - .:/app ports: - "8000:8000" depends_on: # 修正依赖服务名拼写 - db
操作步骤
- 清理原有错误镜像:
docker rmi myapp4 - 重新构建镜像:
docker build -t myapp4 . - 直接启动容器测试:
docker run -p 8000:8000 myapp4,如果使用docker-compose启动则执行docker-compose up --build
内容的提问来源于stack exchange,提问作者Niloofar
相关产品推荐
相关产品推荐

