直接用--ip参数启动最简单,如jupyter notebook --no-browser --ip=192.168.1.100 --port=8888;需确保ip正确、防火墙放行端口、allow_remote_access=true,并通过token或密码认证。

直接用 --ip 参数启动最简单,不用改配置文件
如果你只是临时想让别人(或自己另一台设备)通过局域网 IP 访问当前笔记本,jupyter notebook --no-browser --ip=192.168.1.100 --port=8888 就够了。其中 192.168.1.100 换成你本机实际的局域网 IP(用 ipconfig(Windows)或 ifconfig(macOS/Linux)查),--no-browser 防止自动弹本地窗口,--port 可选但建议显式指定。
常见错误现象:jupyter notebook --ip=192.168.1.100 启动后浏览器打不开、报 Connection refused 或提示“无法连接到服务器”。原因通常是:
-
--ip值写错(比如用了localhost、127.0.0.1或根本不存在的地址) - 防火墙拦截了该端口(Windows Defender 防火墙默认会拦)
- IP 地址不是当前网卡的活跃地址(比如连的是 WiFi 却填了以太网的 IP)
配置文件里设 c.NotebookApp.ip 适合长期固定使用
如果经常要用静态 IP 启动,或者希望每次运行都生效,就改配置文件。先生成它:jupyter notebook --generate-config,然后编辑 ~/.jupyter/jupyter_notebook_config.py(Windows 是 C:\Users\用户名\.jupyter\jupyter_notebook_config.py)。
关键项必须写成这样(注意等号右边是字符串,带引号):
c.NotebookApp.ip = '192.168.1.100' c.NotebookApp.port = 8888 c.NotebookApp.allow_remote_access = True c.NotebookApp.open_browser = False
别写成 c.NotebookApp.ip = * 或 c.NotebookApp.ip = "0.0.0.0"——前者语法错误,后者虽能监听所有接口但不等于“静态 IP”,且更易暴露服务。
容易踩的坑:
- 忘了取消
c.NotebookApp.allow_remote_access的注释(默认是False,不设为True外部访问会被拒绝) - 把
c.NotebookApp.ip设成'*',结果在多网卡机器上绑定失败(Jupyter 2.x+ 已不支持该写法) - 配置保存后没重启 Jupyter 进程,旧进程仍按上次参数跑
为什么不能只靠 --ip 而忽略密码或 token?
即使指定了静态 IP,Jupyter 默认仍要求认证。启动时若没预设密码,控制台会输出一长串 ?token=...,必须复制完整 URL 才能登录。这不是 bug,是安全机制。
解决方法二选一:
- 临时用:启动后复制控制台输出的
http://192.168.1.100:8888/?token=xxx整个链接,在其他设备浏览器打开 - 长期用:用
from notebook.auth import passwd; passwd()生成哈希密码,写进配置文件的c.NotebookApp.password字段(值是字符串,含sha1:前缀)
注意:token 方式每次重启都会变;password 方式才真正固定登录凭证。
Windows 防火墙和热点共享常被忽略
就算 IP 和端口全对,Windows 用户大概率卡在“能 ping 通但打不开网页”。这是因为 Windows 防火墙默认阻止入站连接,尤其当用“移动热点”共享网络时,系统把连接归类为“专用网络”以外的类型,规则更严格。
必须手动放行端口:
- 打开“高级安全 Windows 防火墙” → “入站规则” → “新建规则” → 选择“端口” → TCP → 特定本地端口(如
8888)→ 允许连接 → 勾选“域”“专用”“公用” → 命名保存 - 确认热点设置里没启用“客户端隔离”(某些驱动版本默认开启,导致设备间无法通信)
手机连笔记本热点后,浏览器输 http://192.168.137.1:8888 打不开,八成是这一步漏了。IP 地址本身没问题,问题是流量根本没进到 Jupyter 进程。











