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

Docker生产环境下Django媒体文件未持久化保存到项目media目录问题

解决方案

核心原因是生产环境未给Django的media目录配置Docker持久化卷,容器销毁时目录内文件会同步丢失,按以下步骤修改即可:

  • 第一步:修改docker-compose-production.yml配置
    首先在底部volumes节点新增媒体卷声明:
    volumes:
           static_volume: { }
           pgdata: { }
           media_volume: {}  # 新增媒体文件专属持久卷
    
    再修改backend服务的volumes配置,新增媒体卷挂载,路径与settings.py的MEDIA_ROOT保持一致:
    backend:
        restart: unless-stopped
        build:
            context: .
            dockerfile: ./docker/backend/Dockerfile
        entrypoint: /code/docker/backend/wsgi-entrypoint.sh
        volumes:
            - .:/code
            - static_volume:/code/backend/server/django_static
            - media_volume:/code/backend/server/media  # 新增媒体卷挂载
        expose:
            - 8000
        depends_on:
            -   db
    
    最后修改nginx服务的volumes配置,挂载媒体卷让Nginx可直接读取媒体文件,无需转发到Django处理:
    nginx:
        restart: unless-stopped
        build:
            context: .
            dockerfile: ./docker/nginx/Dockerfile
        ports:
            - 80:80
            - 443:443
        volumes:
            - static_volume:/code/backend/server/django_static
            - media_volume:/code/backend/server/media  # 新增媒体卷挂载
            - ./docker/nginx/production:/etc/nginx/conf.d
            - ./docker/nginx/certbot/conf:/etc/letsencrypt
            - ./docker/nginx/certbot/www:/var/www/certbot
        depends_on:
            - backend
    
  • 第二步:修改Nginx配置文件(对应./docker/nginx/production目录下的.conf文件),新增media路径匹配规则:
    location /media/ {
        alias /code/backend/server/media/;
        expires 30d; # 可选配置,添加媒体文件缓存规则优化访问速度
    }
    
  • 第三步:重启服务生效
    执行命令 docker compose -f docker-compose-production.yml up -d --build 重建启动服务即可,后续媒体文件会持久保存在media_volume卷中,容器重建/销毁都不会丢失。

内容的提问来源于stack exchange,提问作者Zekarias Taye Hirpo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 17:54:03