打开 JupyterLab
打开按钮
部署一个启动模式为 jupyter 的模板,等实例进入 running,然后从实例中打开它。连接标签页上有一个打开 JupyterLab 按钮。它会在新标签页中直接把你带进一个已通过认证的会话。
这个按钮是官方支持的进入方式。不要自己拼地址,也不要依赖书签:实例发布所在的主机和端口在停止再启动后可能会变,书签随后就指向了空处。
如果按钮不见了,检查你部署的模板的启动模式。只有 jupyter 会启动 notebook 服务器。ssh 模式的实例给你的是一个 shell,不是 notebook。参见启动模式。
按钮打开的地址
按钮打开哪个地址,取决于这台主机能不能从外部直接访问:
| 路径 | 地址 | 什么时候用 | 证书 |
|---|---|---|---|
| 直连 | https://<IP>:<端口>/lab?token=… | 主机上发布的端口可以从外部直接访问 | 容器自己生成的证书,浏览器会警告(参见证书警告) |
| 中继 | https://<工作负载 ID>-<Jupyter 端口>.relay.superheat.cloud/lab?token=…(Jupyter 端口默认 8080) | 主机位于 NAT 之后,外部无法直接访问 | 正式签发的证书,浏览器不会警告 |
实例进入 running 时,平台会检测一次这台主机能否从外部直接访问。能访问,按钮就用直连地址;不能访问,按钮就改走中继。中继要等 Superheat CN 启用 superheat.cloud 域名之后才开启;在那之前,按钮打开的始终是直连地址。
两条路径进入的是同一个 JupyterLab,用的是同一个令牌。SSH 不走中继,始终直连。参见通过 SSH 连接。
关于令牌
访问令牌由平台在实例部署时生成并下发给容器,容器以该令牌作为唯一凭据启动 JupyterLab。你无法选择它。你的组织可以读到它:实例的连接标签页在访问令牌下显示它,API 把它作为 access_token 返回。模板的其他应用端口要求的也是同一个令牌——参见实例访问令牌。
由此有两个结论:
- 从控制台打开 JupyterLab。按钮会替你带上令牌,你不必自己拼地址。要像对待密码一样对待这个令牌和按钮的链接。
- 自己在环境中设置
JUPYTER_TOKEN不会有任何效果。平台的环境覆盖层始终优先于租用者提供的值,你填的内容会被覆盖。GPU_COUNT同理。参见环境变量。
你的文件在哪里
JupyterLab 的根目录由 JUPYTER_DIR 指定,默认是 /workspace。文件浏览器无法访问该目录以上的层级,所以你想在侧边栏里看到的东西都要放在它下面。
| 设置项 | 默认值 | 来源 |
|---|---|---|
JUPYTER_DIR | /workspace | 模板的 jupyter_dir 字段 |
JUPYTER_PORT | 8080 | jupyter 模式发布的容器端口 |
JUPYTER_LAB | true (Lab) | 模板的 use_jupyter_lab 字段;设为 false 则提供经典版 notebook |
/workspace 位于你在部署时选定容量的那块磁盘上,因此它能在停止和启动之间保留,并在销毁时被删除。写到容器里其他位置的文件也在同一块磁盘上,命运完全一样——这个目录只是一种约定,不是单独的卷。
标签页在服务器就绪之前就打开了
实例一报告 running,打开 JupyterLab 按钮就会出现。notebook 服务器要稍晚一点才绑定端口,所以点得太早可能会落到一个浏览器错误页——连接被拒绝,或者页面一直加载不完。
等几秒钟再刷新标签页。基础镜像会先启动 JupyterLab,然后才运行模板的 onstart 脚本,所以拖住 notebook 服务器的不会是耗时较长的 onstart。如果刷新仍然失败,通过 SSH 查看服务器自己的日志:
tail -f /var/log/superheat/jupyter.log
证书警告
这一节只适用于直连地址。直连时,JupyterLab 通过 HTTPS 提供服务,用的是容器自己生成的证书,因此浏览器会警告说无法验证该站点。在一个刚开出来的实例上,这个警告是意料之中的。加密本身在正常工作;只是身份无法验证,因为没有哪家公共证书机构会为一台几分钟前才诞生的机器签发证书。
中继地址用的是为 *.relay.superheat.cloud 正式签发的证书,浏览器不会警告。