Я настраиваю jupyterhub для пользователей в нашей группе, чтобы они могли запускать сценарии с использованием нашего пакета python для общих данных без необходимости устанавливать среду на свои компьютеры. Система основана на jupyterhub-deploy-docker (https://github.com/jupyterhub/jupyterhub-deploy-docker/) с изменениями для работы на локальном хосте (https://github.com/PHI-Toolkit/jupyterhub-deploy-docker-localhost), который порождает контейнеры Docker с однопользовательскими экземплярами записных книжек jupyter из докеризованного jupyterhub. Идея состоит в том, чтобы смонтировать локальный каталог хоста (или каталог сервера данных) в контейнер jupyterhub и оттуда передать его одиночным пользовательским экземплярам, которые будут использоваться как notebook_dir. Затем ipynbs может получить доступ к данным на сервере и сохраниться там.
Весь подход работает хорошо, когда он не докеризирован (для тестирования, аутентификации с помощью DummyAuthenticator и создания с помощью SimpleLocalProcessSpawner), но я не могу заставить контейнеры докеров видеть каталог хоста. Мой подход состоит в том, чтобы дополнительно связать путь на хост-машине и указать используемый DOCKER_NOTEBOOK_DIR в качестве цели. Поэтому в docker-compose.yml переделываю раздел томов
volumes:
# Bind Docker socket on the host so we can connect to the daemon from
# within the container
- "/var/run/docker.sock:/var/run/docker.sock:rw"
# Bind Docker volume on host for JupyterHub database and cookie secrets
- "data:${DATA_VOLUME_CONTAINER}"
- "/path/on/host:${DOCKER_NOTEBOOK_DIR}"
это используется в jupyterhub_config.py как notebook_dir создателя:
notebook_dir = os.environ.get('DOCKER_NOTEBOOK_DIR') or '/home/jovyan/work'
c.DockerSpawner.notebook_dir = notebook_dir
# c.DockerSpawner.volumes = {
# 'jupyterhub-user-{username}': notebook_dir,
# 'jupyter-shared': '/home/jovyan/work/shared/',
# 'jupyter-geoserver': '/home/jovyan/work/geoserver',
# 'jupyter-modules': '/home/jovyan/work/modules'
#}
c.DockerSpawner.volumes = { 'jupyter-serverdata': notebook_dir,
'jupyter-shared': '/home/jovyan/work/shared/',
}
Я бы подумал, что тогда блокнот ipython должен получить доступ к содержимому / path / on / host, но я все равно получаю те же каталоги, что и в стандартной конфигурации (с тем же содержимым, хотя я удалил контейнеры и изображения jupyterhub). Как я подозреваю, это связано с DockerSpawner, я попытался использовать SimpleLocalProcessSpawner, но все еще запускал jupyterhub в его контейнере докеров. Однако мне не удалось запустить это (порождение приводит к ошибке 500).
Приветствуется любая помощь о том, как передать внешний путь (путь к хосту) через jupyterhub, работающий в контейнере докеров, в экземпляр ноутбука jupyter.