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

Docker化Django应用实现代码修改自动重载的方法

Django Docker化实时重载问题

我正在将Django应用Docker化,当前使用的docker-compose.yml文件如下:

version: '3'

services:
  # other services as db etc.
  web:
    container_name: web
    build:
      context: .
      dockerfile: Dockerfile.web
    restart: 'always'
    env_file:
      - csgo.env
    ports:
      - '8000:8000'
    volumes:
      - web:/code
    depends_on:
      - db

volumes:
  web:

应用启动日志:

System check identified no issues (0 silenced).
web            | September 15, 2022 - 01:38:47
web            | Django version 4.0.7, using settings 'csgo.settings'
web            | Starting development server at http://0.0.0.0:8000/
web            | Quit the server with CONTROL-C.

目前修改代码(如模型、函数、HTML视图)后,应用无变化且日志未显示重载,需重新构建启动容器才能看到效果。如何实现Docker-compose启动下的实时重载,让代码修改同步到容器中?


解决方案

1. 替换卷挂载类型

当前使用的web:/code是命名卷,容器启动时会将镜像内的/code目录内容复制到卷中,后续本地代码修改无法同步到容器。需要改成绑定挂载,直接映射本地代码目录到容器内:

修改docker-compose.yml的volumes配置:

services:
  web:
    # 保留其他原有配置
    volumes:
      - ./:/code  # 替换原有的 web:/code
# 删除不再需要的命名卷定义
# volumes:
#   web:

2. 确认Django开发服务器配置

Django的runserver默认支持代码变更自动重载,需确保:

  • 启动命令为python manage.py runserver 0.0.0.0:8000,不要添加--noreload参数
  • 容器内工作目录设置为/code

检查Dockerfile.web,确保包含类似配置:

WORKDIR /code
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

3. 解决权限问题(可选)

如果本地用户与容器内用户权限不匹配,可能导致Django无法检测文件变化。可以通过以下方式处理:

  • 在Dockerfile.web中创建匹配本地UID的用户:
    # 替换为你的本地用户UID和GID,可通过`id -u`和`id -g`命令查看
    RUN useradd -m -u 1000 django
    USER django
    
  • 或者在docker-compose.yml中直接指定用户:
    services:
      web:
        # 其他配置不变
        user: "1000:1000"
    

4. 验证效果

修改本地代码后,查看容器日志,应该能看到类似的重载提示:

web            | Restarting development server due to change in 'xxx.py'.
web            | Performing system checks...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 07:01:17