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

Docker中Django+SQLite3构建重启后数据库自动回滚问题求助

解决Docker中Django SQLite数据持久化问题

问题根源

当前docker-compose.yml的volume挂载路径错误,导致容器内的SQLite数据库文件未同步到本地主机。每次重建容器时,镜像中打包的初始数据库文件会覆盖容器内的修改,造成数据丢失。

解决方案步骤

1. 修正docker-compose.yml的Volume配置

将本地数据库目录与容器内对应路径绑定,确保数据库文件持久化到本地。修改后的docker-compose.yml如下:

version: '3'

services:
  web:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "8000:8000"
    volumes:
      # 挂载Django项目目录,实现代码热更新(开发环境用)
      - ./doc_manager:/app/doc_manager
      # 单独挂载数据库目录,持久化SQLite数据
      - ./doc_manager/data:/app/doc_manager/data

2. 确认Django数据库配置正确

打开doc_manager/doc_manager/settings.py,确保DATABASES配置指向容器内的数据库文件路径:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'data' / 'db.sqlite3',
    }
}

注:BASE_DIR是Django自动定义的项目根目录路径,对应容器内的/app/doc_manager,所以该配置会指向容器内的/app/doc_manager/data/db.sqlite3,与挂载的本地目录一致。

3. 重新部署容器

执行以下命令重启服务:

docker compose down
docker compose build
docker compose up -d

额外注意事项

  • 确保本地doc_manager/data目录存在且权限正常,容器内的Python进程需要有读写该目录的权限。
  • 将data/db.sqlite3添加到.gitignore文件,避免数据库文件被提交到版本控制系统:
    # .gitignore
    doc_manager/data/db.sqlite3
    

内容的提问来源于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 23:02:42