← 中文资源

简体中文版本

Flask 启动开发服务器时报端口 5000 已被占用

通过查找占用端口的进程并改用空闲端口或清理残留服务,解决 Flask 的地址已被占用错误。

阅读英文原文

症状

Flask 启动时立即失败并报 OSError: [Errno 98] Address already in use,Windows 上是等价消息。堆栈指向 socket 绑定调用而非业务逻辑。在 macOS 上默认端口 5000 常被 AirPlay Receiver 占用,因此即使看似没有其他进程也会报错。

诊断

用 lsof -i :5000 或 Windows 的 netstat -ano | findstr :5000 找到占用端口的 PID,结束残留进程,再用 –port 5001 启动以确认是端口冲突而非代码问题。

lsof -i :5000

根因

套接字已被其他进程绑定,新服务器无法绑定。应用代码通常没问题,问题在于重复或残留的进程,或端口被系统保留。

修复

停止占用端口的进程或在空闲端口运行服务器;macOS 上关闭 AirPlay Receiver 或换端口。确保每个端口只运行一个服务实例。

验证

修复后服务器会打印 running-on 地址且不再报 OSError,在浏览器加载应用确认可响应。

常见陷阱

直接换端口只能掩盖冲突;若错误反复出现,应确认是否有重复启动的实例或系统保留端口。