SQLite没有端口,它是嵌入式数据库,直接读写本地文件;所谓“默认端口被占用”是混淆了MySQL等网络数据库,真正需检查的是文件路径、权限和进程独占问题。
sqlite 没有端口,根本不存在“默认端口被占用”的问题——它不走网络协议,不监听任何端口。
为什么搜“SQLite 默认端口”会踩坑
因为把 SQLite 和 MySQL、PostgreSQL 混了。SQLite 是嵌入式数据库,直接读写本地文件,sqlite3 命令或程序调用的是文件路径,不是 localhost:3306 这类地址。
常见错误现象:
- 在连接字符串里写
host=localhost port=5432,报错unable to open database file或连接超时 - 用
netstat -an | grep 5432查端口,发现被占,以为要改 SQLite 端口 - 在 Docker 或云服务文档里看到“暴露端口”,误以为 SQLite 也需要类似配置
真正该检查的三个地方
如果你连不上 SQLite,和端口无关,大概率是以下任一问题:
-
database.db文件路径写错(比如相对路径没对准当前工作目录) - 权限不足:程序没读写权限,尤其在 Linux/macOS 下运行时用户不是文件所有者
- 文件被其他进程独占:比如另一个
sqlite3进程正以独占模式打开它,或 Python 脚本没调用conn.close()
验证方式很简单:
ls -l database.db
看权限;
lsof database.db
(macOS/Linux)看谁在用它。
如果真想“远程访问 SQLite”,得加一层代理
SQLite 本身不支持网络访问,硬要跨机器用,必须靠外部服务桥接。这不是改端口的事,而是架构变更:
- 用
LiteFS(Fly.io 出的)同步 SQLite 文件并提供 HTTP 接口,监听:8080等端口 —— 但那是 LiteFS 在监听,不是 SQLite - 用 Python 写个简易 Flask API,用
sqlite3.connect("app.db")读写,再用flask run --port=8000启动服务 - Docker 中跑
nginx + CGI或node-sqlite3 + express,端口由 Web 服务器控制,SQLite 仍只认文件
注意:PRAGMA journal_mode = WAL 在多进程读写时很关键,否则容易遇到 database is locked。
真正要改的从来不是 SQLite 的“端口”,而是你对它的使用方式——它压根不联网,也就没有端口概念。最容易被忽略的,是误把抽象层(比如 ORM 连接字符串、Docker Compose 的 ports 配置)当成 SQLite 自身行为。











