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

树莓派3 B+上Flask服务无法外部访问问题求助

树莓派Flask服务无法被其他设备访问的解决方法

问题概述

树莓派3 B+(搭载最新版Raspbian OS)上运行极简Flask HelloWorld脚本,本地启动正常并显示访问IP,但同网络/不同网络的其他设备均无法访问。已尝试更换浏览器、将谷歌浏览器加入防火墙豁免列表、更换访问设备、切换网络、重启树莓派、更换端口等操作,问题仍存在。

测试脚本:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run(debug=True)

启动日志:

* Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on http://xxx.xxx.xxx.xxx:5000
Press CTRL+C to quit
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: xxx-xxx-xxx-xxx

解决步骤

1. 修改Flask绑定地址,允许外部访问

Flask默认仅绑定127.0.0.1(本地回环地址),只有树莓派自身能访问。修改脚本中app.run的参数,添加host='0.0.0.0',让服务监听所有网卡:

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0')

重启脚本后,日志会显示Running on http://0.0.0.0:5000,此时其他设备可通过树莓派的实际IP访问。

2. 检查树莓派防火墙设置

Raspbian默认可能开启ufw防火墙,需确认目标端口是否放行:

  • 查看防火墙状态:sudo ufw status
  • 若5000端口未放行,添加规则:sudo ufw allow 5000/tcp
  • 若无需防火墙,可直接关闭:sudo ufw disable

3. 验证网络连通性

  • 在访问设备上ping树莓派IP,确认网络可达:ping xxx.xxx.xxx.xxx
  • 用telnet测试端口是否开放:telnet xxx.xxx.xxx.xxx 5000,能连接则端口正常,否则检查端口占用或防火墙配置。

4. 确认端口未被占用

检查目标端口是否被其他程序占用:sudo lsof -i :5000,若有占用,可杀死对应进程,或更换Flask端口(比如改成8080:app.run(debug=True, host='0.0.0.0', port=8080))。

5. 确保同网络设备在同一网段

访问设备和树莓派需连接同一局域网,IP地址段需一致(比如均为192.168.1.x)。不同网络访问需在路由器设置端口转发,将外部端口映射到树莓派的目标端口,同时注意公网IP和安全风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 22:38:13