Docker容器中Django无法运行的原因排查求助
问题排查与解决方案
让我帮你梳理下Django无法运行的核心原因,以及对应的修复方案:
核心问题所在
你的Dockerfile只是完成了Python环境搭建、vim工具安装和Django包的安装,但完全没有初始化任何Django项目——容器里根本没有manage.py这类Django应用的核心文件,自然没法启动服务。另外你启动容器的命令只是进入bash终端,也没有自动触发Django服务的逻辑。
两种可行的修复方案
方案一:修改Dockerfile,预创建项目并设置默认启动命令
这是更规范的做法,能让容器启动后直接运行Django服务。修改后的Dockerfile如下:
FROM python:3.6.5-jessie MAINTAINER example-user RUN apt-get update \ && apt-get install -y vim RUN mkdir require COPY ./requirements.txt require/requirements.txt RUN pip install -r require/requirements.txt # 新增:创建Django项目并切换到项目目录 RUN django-admin startproject sample_project WORKDIR /sample_project EXPOSE 8000 # 设置容器启动时默认执行的命令,启动Django开发服务器(绑定0.0.0.0允许外部访问) CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
然后重新构建镜像:
docker build -t sample-image .
启动容器时无需手动进入bash,直接后台运行:
docker run -d --name sample_django -p 8001:8000 sample-image
之后在宿主机浏览器访问 http://localhost:8001,就能看到Django的默认欢迎页面了。
方案二:在现有容器内手动创建并启动项目
如果你不想修改Dockerfile,也可以在当前容器的bash终端里手动操作:
- 首先在容器内创建Django项目:
django-admin startproject sample_project cd sample_project
- 启动Django开发服务器(必须绑定
0.0.0.0,否则宿主机无法通过端口映射访问):
python manage.py runserver 0.0.0.0:8000
保持终端打开,然后在宿主机访问 http://localhost:8001 即可。
额外提醒
- Django开发服务器默认只监听
127.0.0.1,在容器环境下必须指定0.0.0.0:8000,否则外部无法访问服务。 - 如果后续需要把本地的Django代码挂载到容器里开发,可以用
-v参数,比如:
docker run -ti --name sample_django -p 8001:8000 -v /你的本地项目路径:/sample_project sample-image /bin/bash
内容的提问来源于stack exchange,提问作者David Foie Gras
相关产品推荐
相关产品推荐

