Как запустить ноутбук Jupyter, используя изображение сингулярности?

Я создал образ Singularity (jupyter.sif), который содержит последнюю версию анаконды, и я хочу использовать его для запуска ноутбука Jupyter.

Я хотел бы запустить что-то вроде этого:

#####

singularity exec --bind /path/outside/image/:/path/inside/image/ jupyter.sif jupyter notebook --notebook-dir=/path/to/dir --no-browser --ip=127.0.0.1

#####

По сути, просто запустите обычный ноутбук Jupyter, который будет использовать версию Python и пакеты, установленные в образе единственного числа. В идеале ноутбук будет читать и записывать файлы вне изображения (поэтому я и указываю путь привязки).

Однако, когда я запускаю вышеупомянутую команду, я получаю следующую ошибку:

#####

Traceback (последний вызов был последним): файл "/opt/conda/lib/python3.7/site-packages/traitlets/traitlets.py", строка 528, в get value = obj._trait_values ​​[self.name] KeyError: 'runtime_dir"

Во время обработки вышеупомянутого исключения произошло другое исключение:

Traceback (последний вызов был последним):

Файл "/opt/conda/bin/jupyter-notebook", строка 11, в sys.exit(main())

Файл "/opt/conda/lib/python3.7/site-packages/jupyter_core/application.py", строка 266, в файле launch_instance, возвращает super(JupyterApp, cls).launch_instance(argv=argv, **kwargs)

Файл "/opt/conda/lib/python3.7/site-packages/traitlets/config/application.py", строка 657, в файле launch_instance app.initialize(argv)

Файл "", строка 2, в инициализации

Файл "/opt/conda/lib/python3.7/site-packages/traitlets/config/application.py", строка 87, в методе возврата catch_config_error (app, *args, **kwargs)

Файл "/opt/conda/lib/python3.7/site-packages/notebook/notebookapp.py", строка 1626, в initialize self.init_configurables()

Файл "/opt/conda/lib/python3.7/site-packages/notebook/notebookapp.py", строка 1319, в init_configurables connection_dir=self.runtime_dir,

Файл "/opt/conda/lib/python3.7/site-packages/traitlets/traitlets.py", строка 556, в get return self.get (obj, cls)

Файл "/opt/conda/lib/python3.7/site-packages/traitlets/traitlets.py", строка 535, в get value = self._validate(obj, dynamic_default())

Файл "/opt/conda/lib/python3.7/site-packages/jupyter_core/application.py", строка 99, в _runtime_dir_default sure_dir_exists(rd, mode=0o700)

Файл "/opt/conda/lib/python3.7/site-packages/jupyter_core/utils/init.py", строка 13, в sure_dir_exists os.makedirs(путь, режим = режим)

Файл "/opt/conda/lib/python3.7/os.py", строка 211, в македирах македир (head, exist_ok=exist_ok)

Файл "/opt/conda/lib/python3.7/os.py", строка 211, в македирах македир (head, exist_ok=exist_ok)

Файл "/opt/conda/lib/python3.7/os.py", строка 221, в makedirs mkdir(имя, режим)

OSError: [Errno 30] Файловая система только для чтения: '/ run / user'

#####

Я предполагаю, что это потому, что ноутбук пытается что-то написать внутри изображения, и так как я не запускаю изображение как sudo (я не хочу этого делать), и я также не указываю --writable при выполнении изображения (также не хочу этого делать), он жалуется на то, что не может писать внутри изображения.

Есть ли способ "сказать" изображению о том, что он читает и записывает файлы в моем домашнем каталоге, а не внутри изображения?

Спасибо

3 ответа

Решение

Я только что столкнулся с той же проблемой, и это, похоже, решило ее для меня: map /run/user inside для контейнера в ваш рабочий каталог снаружи (или каталог по вашему выбору). Для вашего случая, это будет означать, вероятно, это:

singularity exec --bind /path/outside/image/:/path/inside/image/ --bind $PWD:/run/user jupyter.sif jupyter notebook --notebook-dir=/path/to/dir --no-browser --ip=127.0.0.1

При запуске так, в моем случае папка 1000 был создан

Это хорошо работает с экземплярами сингулярности, например:

   singularity instance.start --writable --contain --bind shared:/shared sandbox/ jupyter

В Обслуживаемом ответе работает, но вот еще одно решение , которое не требует привязка монтирует. Можно бежать unset XDG_RUNTIME_DIR перед запуском ноутбука jupyter, и эта ошибка исчезнет.

Другие вопросы по тегам