Docker部署Django项目报错:无法找到/app/src/manage.py文件
Django Docker部署挂载卷报错解决
问题描述
我有一个默认Django项目想要通过Docker部署,同时设置卷挂载本地src目录,但启动容器时出现错误:
python: can't open file '/app/src/manage.py': [Errno 2] No such file or directory
我的Dockerfile
FROM python:3.11 WORKDIR /app ADD requirements.txt . RUN pip install -r requirements.txt RUN mkdir ./src COPY ./src ./src VOLUME /app/src EXPOSE 8000 CMD ["python", "src/manage.py", "runserver", "0.0.0.0:8000"]
错误复现命令
$ docker build -t django-img . $ docker run -v ./src:/app/src -p 8000:8000 django-img
项目目录结构
- .venv - requirement.txt - dockerfile - src -- component1 --- ... -- src --- .env --- settings.py --- urls.py -- manage.py
问题原因及解决方法
1. 依赖文件名拼写不一致
项目目录里的依赖文件是requirement.txt,但Dockerfile里写的是requirements.txt,这会导致依赖安装失败(虽然不是当前报错的直接原因,但必须修正):
修改Dockerfile中相关指令:
ADD requirement.txt . RUN pip install -r requirement.txt
2. 卷挂载覆盖容器内文件
Dockerfile中的VOLUME /app/src会在构建镜像时创建匿名卷,当你用-v ./src:/app/src挂载本地目录时,会直接覆盖容器内/app/src的所有内容。如果运行docker run时当前工作目录不是项目根目录,./src会指向错误路径,导致容器内/app/src没有manage.py。
解决:
- 确保执行
docker run命令时,你处于项目根目录(即包含dockerfile和src文件夹的目录)。 - 删除Dockerfile里的
VOLUME /app/src指令,运行时的-v挂载已经足够,无需在镜像中提前声明卷。
3. 冗余的目录创建指令
Dockerfile里的RUN mkdir ./src完全多余,COPY ./src ./src会自动创建目标目录(如果不存在),直接删除这一行即可。
修正后的Dockerfile
FROM python:3.11 WORKDIR /app ADD requirement.txt . RUN pip install -r requirement.txt COPY ./src ./src EXPOSE 8000 CMD ["python", "src/manage.py", "runserver", "0.0.0.0:8000"]
验证步骤
- 切换到项目根目录
- 重新构建镜像:
docker build -t django-img . - 启动容器:
docker run -v ./src:/app/src -p 8000:8000 django-img
内容的提问来源于stack exchange,提问作者dia05
相关产品推荐
相关产品推荐

