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

Docker+Django实现SQLite3数据库持久化方案咨询

解决SQLite3数据库持久化问题

问题根源分析

你的docker-compose-DEV.yml里同时配置了本地目录挂载和命名卷挂载,两者存在冲突:

  • 你将本地项目根目录./挂载到容器内的/app/doc-manager-web,这会覆盖容器内该路径下的所有内容,包括你试图用命名卷挂载的/app/doc-manager-web/data目录。
  • 实际数据库文件存放在本地的./data文件夹中,而非Docker命名卷里。当执行docker compose down或重新构建时,若本地data目录被意外重置(比如构建过程覆盖、手动清理等),就会导致数据库回滚。

修复方案

1. 调整Docker Compose的Volume配置

修改docker-compose-DEV.yml,避免本地目录挂载覆盖数据库目录。只挂载需要热更新的代码目录(比如Django项目的doc_manager文件夹),保留命名卷用于持久化数据库:

version: '3'

services:
  web:
    build:
      context: .
      dockerfile: Dockerfile_DEV
    ports:
      - "8000:8000"
    volumes:
      # 仅挂载Django代码目录实现热更新,不覆盖data目录
      - ./doc_manager:/app/doc-manager-web/doc_manager
      # 用命名卷持久化数据库目录
      - data:/app/doc-manager-web/data
    
volumes:
  data:

2. 确认Django数据库路径配置

打开Django项目的doc_manager/doc_manager/settings.py,检查DATABASES配置,确保数据库文件路径指向容器内的data目录:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        # BASE_DIR为Django项目根目录,../data对应容器内的/app/doc-manager-web/data
        'NAME': BASE_DIR / '../data/db.sqlite3',
    }
}

3. 清理旧的无效挂载(可选)

如果之前本地./data目录存在无效数据,可先删除避免干扰:

rm -rf ./data

随后重新启动容器:

docker compose -f docker-compose-DEV.yml up --build

验证持久化

执行以下步骤测试:

  1. 在Django后台添加测试数据
  2. 执行docker compose -f docker-compose-DEV.yml down
  3. 重新启动容器:docker compose -f docker-compose-DEV.yml up
  4. 检查后台数据是否保留

配置完成后,数据库文件会持久保存在Docker命名卷data中,无论执行down/stop/start/up/build等命令,都不会影响数据库内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 07:27:34