如何让局域网内其他设备可访问Jupyter中运行的Panel仪表板
局域网访问Panel仪表板解决方案
问题原因梳理
你遇到的三个报错分别对应三类配置问题:
websocket连接被拒绝:Panel底层基于Bokeh,默认只允许localhost来源的websocket连接,外部设备访问会被拦截端口随机变动:未指定固定端口时,每次启动服务都会随机分配可用端口,和你预设的websocket_origin端口不匹配WinError 10048端口占用:之前启动的Panel服务未正常关闭,对应端口仍被占用
分步操作
第一步:释放占用端口(或更换未使用端口)
如果要继续用60840端口,先结束占用该端口的进程:
- 打开Windows命令提示符,执行命令查找占用端口的进程PID:
netstat -ano | findstr :60840 - 执行命令结束对应进程,替换
<PID>为上一步查到的数字:taskkill /PID <PID> /F
也可以直接换用其他未被占用的端口,比如8501、9000等常用测试端口。
第二步:修改启动代码,配置正确参数
需要同时开启外部访问权限、固定端口、放开websocket来源限制,完整代码如下:
import panel as pn pn.extension() dashboard_title = pn.panel('## Test Dashboard') dashboard_footnote = pn.panel('Test Test Test') dash = pn.Column(dashboard_title, dashboard_footnote) dash.servable(title="Claims Dashboard") pn.serve( dash, port=60840, # 替换为你要使用的固定端口 address="0.0.0.0", # 监听所有网卡,允许局域网设备访问 websocket_origin="*", # 企业内部局域网场景可直接允许所有来源,无需逐个添加IP show=True # 本地自动弹出浏览器,不需要可设为False )
第三步:访问验证
- 确认启动服务的电脑局域网IP正确(你当前的IP为10.80.60.31)
- 同一局域网内的其他设备,直接访问
http://10.80.60.31:60840即可打开仪表板 - 如果访问失败,检查Windows防火墙是否允许Python通过公网/专网络访问,放行对应端口即可
可选安全配置
如果企业对安全要求较高,不想放开所有websocket来源,可以把websocket_origin的值替换为你需要允许的IP+端口列表,比如:websocket_origin=["localhost:60840", "10.80.60.31:60840", "10.80.40.41:60840"]
所有需要访问仪表板的设备IP都要加入列表即可。
内容的提问来源于stack exchange,提问作者Jack_loc
相关产品推荐
相关产品推荐

