最简单方式是命令行启动时加--port参数,如jupyter notebook --port 8889;需确保端口未被占用且有绑定权限,否则报errno 98或13错误。

启动时直接用 --port 参数指定端口
最简单的方式,就是命令行启动时加 --port。Jupyter 会立刻监听你指定的端口,前提是该端口未被占用且有权限绑定(比如非 root 用户不能绑定 1024 以下端口)。
常见错误现象:OSError: [Errno 98] Address already in use —— 表示端口已被占;PermissionError: [Errno 13] —— 尝试绑定 80、443 等特权端口但没用 sudo。
-
jupyter notebook --port 8889:启动并监听 8889 -
jupyter notebook --port 9999 --no-browser:不自动打开浏览器,适合远程或后台运行 - 端口号必须是纯数字,不能带引号或尖括号,比如
--port 8889✅,--port "8889"❌
通过配置文件永久设置 c.NotebookApp.port
如果你每次都要输 --port,或者要用在 Docker、systemd 或定时任务里,建议写进配置文件。这样所有启动方式(包括双击图标、jupyter lab)都会默认走这个端口。
操作步骤:
- 先生成配置文件:
jupyter notebook --generate-config(若尚未存在) - 编辑
~/.jupyter/jupyter_notebook_config.py - 取消注释并修改这一行:
c.NotebookApp.port = 8889 - 保存后,直接运行
jupyter notebook就会用 8889,无需额外参数
注意:如果同时用了命令行 --port 和配置文件,命令行参数优先级更高,会覆盖配置文件值。
远程访问时端口要分清「服务端监听端口」和「SSH 转发端口」
很多人卡在这一步:明明服务器上 jupyter notebook --port 8889 启动了,本地却打不开 http://server_ip:8889 —— 因为默认只监听 localhost,且防火墙/云服务器安全组通常没放行该端口。
更安全的做法是用 SSH 端口转发,这时有两个端口要区分清楚:
- 服务端 Jupyter 实际监听的端口(比如
8889)—— 写在--port或配置里 - 本地浏览器访问的端口(比如
8888)—— 是 SSH 命令中-L左边那个
例如:ssh -N -L 8888:localhost:8889 user@server_ip,之后访问 http://localhost:8888 即可。这里 8888 是本地端口,8889 是服务器上 Jupyter 真正跑着的端口。
Docker 容器里指定端口要同时做两件事
在 Docker 中改端口容易漏掉一个关键点:只改 Jupyter 的监听端口,不映射容器端口,外部还是连不上。
必须同步处理:
- 启动容器时用
-p 8878:8878(左边是宿主机端口,右边是容器内端口) - 容器内启动 Jupyter 时指定相同端口:
jupyter notebook --port 8878 --no-browser --ip=0.0.0.0 - 如果容器内 Jupyter 监听的是
8878,但-p映射的是8878:8000,就会 404 或连接拒绝
另外,--ip=0.0.0.0 必须加上,否则默认只绑 127.0.0.1,容器内也访问不了自己暴露的端口。











