要在使用 Docker 启动的 Flask 应用中保存 SQLite 数据库,你需要确保数据库文件位于一个持久化的存储位置,即使容器停止或重新启动,数据也不会丢失。以下是一些方法来实现这一目标:
方法一:使用 Docker 卷
Docker 卷是用于持久化数据的推荐方式。你可以将 SQLite 数据库文件存储在卷中,以便数据在容器重启后仍然存在。
1. 创建 Docker 卷
首先,创建一个 Docker 卷:
sudo docker volume create flask_db_volume
2. 修改 docker-compose.yml
文件
在你的 docker-compose.yml
文件中,添加卷挂载配置:
version: '3'
services:
web:
image: your_flask_image
ports:
- "5000:5000"
volumes:
- flask_db_volume:/app/data # 假设数据库文件位于 /app/data 目录
volumes:
flask_db_volume:
3. 修改 Flask 配置
确保你的 Flask 应用将 SQLite 数据库文件存储在 /app/data
目录中。例如,在你的 Flask 配置文件中:
import os
basedir = os.path.abspath(os.path.dirname(__file__))
SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'data', 'questions.db')
4. 启动容器
使用 docker-compose
启动容器:
sudo docker-compose up
现在,SQLite 数据库文件将持久化存储在 Docker 卷中。
方法二:使用绑定挂载
你还可以使用绑定挂载,将主机上的一个目录挂载到容器中。
1. 修改 docker-compose.yml
文件
在你的 docker-compose.yml
文件中,添加绑定挂载配置:
version: '3'
services:
web:
image: your_flask_image
ports:
- "5000:5000"
volumes:
- ./data:/app/data # 假设数据库文件位于 /app/data 目录
volumes:
flask_db_volume:
这里,./data
是主机上的目录,/app/data
是容器内的目录。
2. 修改 Flask 配置
确保你的 Flask 应用将 SQLite 数据库文件存储在 /app/data
目录中。例如,在你的 Flask 配置文件中:
import os
basedir = os.path.abspath(os.path.dirname(__file__))
SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'data', 'questions.db')
3. 启动容器
使用 docker-compose
启动容器:
sudo docker-compose up
现在,SQLite 数据库文件将持久化存储在主机的 ./data
目录中。
方法三:手动备份和恢复
如果你不想使用卷或绑定挂载,你可以手动备份和恢复数据库文件。
1. 进入容器
进入容器:
sudo docker exec -it make_video-web-1 sh
2. 复制数据库文件到主机
在容器内找到数据库文件的位置,然后将其复制到主机:
exit # 退出容器
sudo docker cp make_video-web-1:/app/data/questions.db ./backup/questions.db
3. 恢复数据库文件到容器
如果需要恢复数据库文件到容器:
sudo docker cp ./backup/questions.db make_video-web-1:/app/data/questions.db
通过这些方法,你可以确保 SQLite 数据库在 Docker 容器中持久化存储。推荐使用 Docker 卷或绑定挂载,因为它们更方便、自动化程度更高。