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

Docker环境下Django应用代码修改后自动重载失效求助

Django + PostGIS + Docker 代码修改不自动重载问题解决方案

核心问题与修复步骤

1. 启用Daphne自动重载

当前entrypoint.sh中的Daphne启动命令缺少--reload参数,这是触发代码改动后自动重启的关键。修改entrypoint.sh:

python manage.py collectstatic --no-input
python manage.py migrate --force
# 添加--reload开启自动重载
daphne core.asgi:application --bind 0.0.0.0 --reload

2. 禁用Python字节码缓存

Dockerfile中PYTHONWRITEBYTECODE=1会生成.pyc缓存文件,导致容器读取旧代码而非修改后的文件。修改Dockerfile的环境变量:

ENV PYTHONWRITEBYTECODE=0  # 关闭字节码生成,避免缓存干扰

3. 优化本地文件挂载规则

创建.dockerignore文件,排除不必要的本地文件,避免挂载到容器中引发冲突:

venv/
__pycache__/
*.pyc
*.pyo
.env
.dockerignore
Dockerfile
docker-compose.yml

4. 修正Dockerfile的文件复制路径

当前Dockerfile的COPY路径存在逻辑错误,导致entrypoint脚本路径不匹配。调整Dockerfile:

FROM python:3.11.3-slim-buster

WORKDIR /app

ENV REDIS_HOST "redis"
ENV PYTHONUNBUFFERED=1
ENV PYTHONWRITEBYTECODE=0  # 修正字节码配置

RUN apt-get update \
    && apt-get -y install netcat gcc postgresql \
    && apt-get clean

RUN apt-get update \
    && apt-get install -y binutils libproj-dev gdal-bin python-gdal python3-gdal    

RUN pip install --upgrade pip

# 先复制依赖文件,利用Docker缓存
COPY ./requirements.txt .
RUN pip install -r requirements.txt

# 复制entrypoint脚本到工作目录
COPY ./entrypoint.sh .
ENTRYPOINT ["sh", "/app/entrypoint.sh"]

# 最后复制项目代码
COPY . .

5. 验证卷挂载一致性

确认docker-compose.yml中app_django的卷挂载路径与Dockerfile的工作目录匹配:

app_django:
  restart: always
  build: .
  volumes:
    - .:/app/  # 本地项目根目录挂载到容器工作目录/app
    - static_files:/app/static  # 修正静态文件挂载路径,与容器内路径一致
  ports:
    - 8000:8000
  env_file:
    - .env
  depends_on:
    - pgdb

6. 重启容器生效

修改完成后,重新构建并启动容器:

docker-compose down
docker-compose up --build

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 21:17:42