Я пытаюсь запустить 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
все работает, нос нежелательным предупреждением: я теперь root в контейнере, и любой файл, который я создаю в домашнем каталоге, принадлежит не testuser
, а (Docker container) root
.Внутри самой виртуальной машины testuser
не может, например, удалить эти файлы.
(обратите внимание на c.DockerSpawner.remove = True
: если я не включу это, JupyterHub застревает в предыдущем контейнере, который не '--allow-root
)
Документация предполагает, что начальная конфигурация должна быть правильной, и --allow-root
не требуется для стандартного стека докеров (я, очевидно, здесь использую стандартную jupyterhub/singleuser:0.9
).
Для сравнения, использование dockerspawner.DockerSpawner
работает нормально.
Я не вижу, что мне не хватает, или где искать дополнительные параметры отладки.Поэтому любые предложения приветствуются.
Jupyter (Hub) версии 0.9.4 в Ubuntu 18.04.2