将Django项目部署到Docker容器时HTML页面无法正常显示
Django项目Docker部署后HTML页面无法正常显示问题
我在将自研Django项目部署到Docker容器时遇到问题:使用Gunicorn运行项目后,HTML页面无法正常显示(即使移除静态文件后问题依旧)。以下是我的Dockerfile内容:
FROM python:3.10 # Establece el directorio de trabajo en /app WORKDIR /app # Copia el archivo requirements.txt al contenedor en /app/ COPY requirements.txt /app/ # Crea y activa el entorno virtual RUN python -m venv venv RUN /bin/bash -c "source venv/bin/activate" # Instala las dependencias RUN pip install --no-cache-dir -r requirements.txt # Copia el contenido del directorio actual al contenedor en /app/ COPY . /app/ # Indica que la aplicación se ejecutará en el puerto 9005 EXPOSE 9005 # Define la variable de entorno para Django ENV DJANGO_SETTINGS_MODULE=Arriendos_Backend.settings # Instala Gunicorn RUN pip install gunicorn CMD ["gunicorn", "-c", "gunicorn_config.py", "Arriendos_Backend.wsgi:application"]
问题排查与解决方案
修复虚拟环境激活无效问题:Docker中每个
RUN指令都是独立的shell进程,单独执行source venv/bin/activate不会让后续指令在虚拟环境中运行。可以直接调用虚拟环境内的pip工具来安装依赖:
修改Dockerfile中安装依赖和Gunicorn的步骤:# 安装依赖 RUN venv/bin/pip install --no-cache-dir -r requirements.txt # 安装Gunicorn RUN venv/bin/pip install gunicorn或者直接移除虚拟环境相关步骤(Docker容器本身已提供隔离环境,虚拟环境非必需),直接使用系统pip安装。
修正Django核心配置:
- 生产环境下(使用Gunicorn),必须将
settings.py中的DEBUG设为False,同时配置ALLOWED_HOSTS,例如ALLOWED_HOSTS = ['*'](测试场景可用,生产环境建议指定具体域名/IP)。 - 执行静态文件收集命令,在Dockerfile中添加:
(若未使用虚拟环境,改为RUN venv/bin/python manage.py collectstatic --noinputpython manage.py collectstatic --noinput)
- 生产环境下(使用Gunicorn),必须将
检查Gunicorn配置:
- 确认
gunicorn_config.py中绑定了正确的端口和地址,例如:bind = "0.0.0.0:9005" - 也可以直接在CMD中指定端口,省略配置文件:
CMD ["gunicorn", "--bind", "0.0.0.0:9005", "Arriendos_Backend.wsgi:application"]
- 确认
验证容器端口映射:
启动容器时必须映射主机端口与容器9005端口,命令示例:docker run -p 9005:9005 你的镜像名称
内容的提问来源于stack exchange,提问作者Cristhian Leandro Gngora Torre
相关产品推荐
相关产品推荐

