【发布时间】:2019-02-26 16:15:00
【问题描述】:
我正在尝试在虚拟机上运行 JupyterHub,使用 dockerspawner.SystemUserSpawner,生成 Jupyter Lab 实例。
我的 jupyterhub_config.py 有以下(额外的)行:
c.Spawner.default_url = '/lab'
c.Spawner.cmd = ['jupyter', 'labhub']
c.JupyterHub.spawner_class = 'dockerspawner.SystemUserSpawner'
(加上bind_url 和hub_ip 的行)。其他一切都应该是默认的。
在运行 (jupyterhub -f /etc/jupyterhub/jupyterhub_config.py) 并在浏览器中登录时,我遇到了 500 错误。命令行日志如下:
[D 2019-02-26 16:55:37.869 JupyterHub dockerspawner:644] Getting container 'jupyter-testuser'
[D 2019-02-26 16:55:37.873 JupyterHub dockerspawner:629] Container 8bf627d status: {'Dead': False,
'Error': '',
'ExitCode': 1,
'FinishedAt': '2019-02-26T15:55:29.518823812Z',
'OOMKilled': False,
'Paused': False,
'Pid': 0,
'Restarting': False,
'Running': False,
'StartedAt': '2019-02-26T15:55:28.446881243Z',
'Status': 'exited'}
[W 2019-02-26 16:55:37.874 JupyterHub web:1667] 500 GET /hub/user/testuser/ (www.xxx.yyy.zzz): Spawner failed to start [status=ExitCode=1, Error='', FinishedAt=2019-02-26T15:55:29.518823812Z]. The logs for testuser may contain details.
[D 2019-02-26 16:55:37.875 JupyterHub base:880] No template for 500
JupyterHub 本身然后陷入(无休止?)循环,试图每 10 秒生成一次容器。
忽略丢失的 500 模板,我从容器状态消息中略知一二,但 docker logs jupyter-testuser 显示:
....
[C 2019-02-26 15:55:29.360 SingleUserLabApp notebookapp:1707] Running as root is not recommended. Use --allow-root to bypass.
[D 2019-02-26 15:55:29.360 SingleUserLabApp application:647] Exiting application: jupyter-notebook
当我将 jupyterhub_config.py 更改为包含时
c.Spawner.cmd = ['jupyter', 'labhub', '--allow-root']
c.DockerSpawner.remove = True
事情确实有效,但有一个不需要的警告:我现在是容器中的根,并且我在主目录中创建的任何文件都不属于testuser,而是属于(Docker 容器)root。例如,在 VM 内部,testuser 无法删除这些文件。
(注意c.DockerSpawner.remove = True:如果我不包含它,JupyterHub 会卡在没有--allow-root 的前一个容器上)
文档建议初始配置应该是正确的,--allow-root 对于标准 docker 堆栈不是必需的(我显然在这里使用默认配置,jupyterhub/singleuser:0.9)。
作为比较,使用dockerspawner.DockerSpawner 效果很好。
我没有看到我缺少什么,或者在哪里寻找更多调试选项。因此,欢迎提出任何建议。
Ubuntu 18.04.2 上的 Jupyter(Hub) 版本 0.9.4
【问题讨论】:
标签: jupyterhub