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
相关产品推荐
相关产品推荐

