核心是配置服务监听所有网卡并放行防火墙:必须编辑配置文件设c.serverapp.ip='0.0.0.0'、c.serverapp.allow_remote_access=true,且在windows中用powershell添加入站防火墙规则,wsl2用户还需用hostname -i获取真实ip并验证连通性。

直接在局域网内访问 Jupyter Notebook,核心就两件事:让服务监听所有网卡(0.0.0.0),并确保 Windows/Linux 防火墙放行对应端口。不改配置、不调防火墙,只靠 jupyter notebook --no-browser 是进不了别人电脑的。
怎么改配置文件让 Jupyter 监听局域网
关键不是“启动时加参数”,而是持久化配置——否则每次重启都要重输。生成配置后必须手动编辑 ~/.jupyter/jupyter_notebook_config.py(Linux/macOS)或 C:\Users\用户名\.jupyter\jupyter_notebook_config.py(Windows):
-
c.ServerApp.ip = '0.0.0.0'是必须项;'*'在新版中已被弃用,会报错 -
c.ServerApp.port = 8888(或你指定的其他端口),避免和已占端口冲突 -
c.ServerApp.open_browser = False防止 WSL 或远程服务器上弹出失败的浏览器 -
c.ServerApp.allow_remote_access = True新版 Jupyter(>=6.0)强制要求,否则即使绑了0.0.0.0也拒绝外部连接 - 别漏掉
c.ServerApp.password—— 密码哈希要从jupyter notebook password生成,不能手写明文
为什么局域网里打不开,十有八九是防火墙拦的
Windows 防火墙默认不放行 WSL 或本机 Python 进程的入站连接,哪怕你开了 0.0.0.0。必须显式添加规则:
- PowerShell(管理员)运行:
New-NetFirewallRule -DisplayName "Jupyter" -Direction Inbound -LocalPort 8888 -Protocol TCP -Action Allow - 如果用了非标准端口(比如
8899),记得把8888换成对应数字 - WSL2 用户额外注意:Windows 防火墙管的是 Win 主机的入站,不是 WSL 虚拟网卡;所以规则加在 Windows 上,不是 WSL 里
- 某些安全软件(如 360、腾讯电脑管家)会覆盖系统防火墙策略,需单独检查其“网络防护”开关
WSL2 下获取正确 IP 并验证连通性
WSL2 使用虚拟网卡,localhost 和 127.0.0.1 在 Windows 主机上无法访问 WSL 服务。必须用 WSL2 的实际 IP:
- 在 WSL 终端执行:
hostname -I,输出类似172.28.123.45的 IPv4 地址(注意:不是127.0.0.1) - Windows 主机上用
ping 172.28.123.45测试是否能通;不通说明 WSL 网络没起来或被拦截 - 局域网其他设备(手机/笔记本)浏览器访问:
http://172.28.123.45:8888,不是http://localhost:8888 - 如果只想让 Win 主机访问(不跨设备),可用
netsh interface portproxy做端口转发,但这是绕路方案,优先排查直连
最常被忽略的点:新版 Jupyter 默认用 ServerApp 前缀(不是旧的 NotebookApp),配错前缀会导致配置完全不生效,且无任何提示。检查你用的 Jupyter 版本(jupyter --version),≥6.0 就必须用 c.ServerApp.xxx。











