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

Flask与Docker环境下sqlite3无法打开数据库文件问题排查

问题分析与解决方案

核心原因

本地能正常连接但容器内报错,本质是容器环境与本地环境的文件系统隔离导致的,大概率是Dockerfile未正确复制数据库文件,同时可能伴随app.py路径配置问题,两者都可能出问题。

1. Dockerfile的常见问题

  • 未复制数据库文件到容器:本地项目目录里的fraud_detection.db不会自动进入容器,如果你没在Dockerfile里加复制指令,容器内根本不存在这个文件,自然打不开。
  • 工作目录与复制路径不匹配:比如用WORKDIR /app指定了容器内的工作目录,但复制文件时路径层级错误,导致数据库文件不在预期位置。

2. app.py的常见问题

  • 使用本地绝对路径:比如代码里写了sqlite3.connect("/Users/xxx/project/fraud_detection.db"),容器的文件系统和本地完全独立,这个路径在容器里不存在,必须用相对路径(如./fraud_detection.db)。
  • 路径大小写不匹配:本地Windows/macOS不区分文件名大小写,但容器内的Linux环境严格区分,代码里的路径和实际文件名大小写不一致也会报错。

3. 修复步骤

调整Dockerfile

确保把数据库文件复制到容器内,示例配置:

FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 复制所有项目文件(包括数据库)到容器工作目录
COPY . .
CMD ["python", "app.py"]

修正app.py的数据库路径

改用相对路径连接数据库:

import sqlite3
from flask import Flask

app = Flask(__name__)

def get_db_connection():
    # 基于容器内工作目录的相对路径
    conn = sqlite3.connect('./fraud_detection.db')
    conn.row_factory = sqlite3.Row
    return conn

可选:用Docker卷持久化数据

如果数据库文件较大或需要本地实时同步,可在运行容器时挂载本地文件:

docker run -v $(pwd)/fraud_detection.db:/app/fraud_detection.db -p 5000:5000 your-image-name

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 15:43:14