Ноутбуки не сохраняются для Jupyter в контейнере Docker? - PullRequest
0 голосов
/ 08 ноября 2018

Запуск jupyter в док-контейнере - это хорошее решение для меня, но у меня возникают проблемы с сохранением файлов ноутбука, как указано в документации здесь .

В документах говорится, что после закрытия сеанса и выключения сервера файлы .ipynb (записной книжки) должны быть сохранены в каталоге ./work, однако для меня это не так. Я создал записные книжки как в корневом каталоге, так и в каталоге / work, который отображается на домашней странице Jupyter, но ни один из них не будет найден после выключения, и если я перезапущу сервер, их больше нет в списке каталогов. Я попытался запустить контейнер двумя способами - во-первых, как это было предложено в документации (вместо тега изображения была указана последняя):

docker run -p 8888:8888 jupyter/scipy-notebook:latest

и во-вторых, создав файл docker-compose.yml, который позволяет мне записывать параметры текста команды и избегать безопасности токена (которая мне не нужна) следующим образом:

version: '3'

  services: # jupyter notebook
    jupyter_notebook:
    image: jupyter/scipy-notebook
    volumes:
      - ./work:/work
    ports:
      - "8888:8888"
    command: "start.sh jupyter notebook --NotebookApp.token=''"

Я работаю под Ubuntu 18.04.1 LTS с докером 18.06.1-ce Я ожидаю найти записную книжку (по крайней мере ту, которую я создал в папке / work) в папке ./work хост-системы, которая находится в каталоге, где я запустил docker (или docker-compose), но там ничего нет.

Вот стенограмма сессии:

   s@VC66:ls -la
   -rw-r--r-- 1 steve steve  232 Nov  7 22:45 docker-compose.yml
   drwxr-xr-x 2 steve steve 4096 Nov  7 21:34 work

   s@VC66:~/sambashare/jupyter$ cat docker-compose.yml 

   version: '3'

     services:
       jupyter_notebook:
         image: jupyter/scipy-notebook
         volumes:
           - ./work:/work
         ports:
           - "8888:8888"
         command: "start.sh jupyter notebook --NotebookApp.token=''"

   s@VC66:~/sambashare/jupyter$ docker-compose up

   Creating network "jupyter_default" with the default driver
   Creating jupyter_jupyter_notebook_1 ... done
   Attaching to jupyter_jupyter_notebook_1
   jupyter_notebook_1  | Container must be run with group "root" to update passwd file
   jupyter_notebook_1  | Executing the command: jupyter notebook --NotebookApp.token=
   jupyter_notebook_1  | [I 16:08:40.454 NotebookApp] Writing notebook server cookie secret to /home/jovyan/.local/share/jupyter/runtime/notebook_cookie_secret
   jupyter_notebook_1  | [W 16:08:40.597 NotebookApp] All authentication is disabled.  Anyone who can connect to this server will be able to run code.
   jupyter_notebook_1  | [I 16:08:40.625 NotebookApp] JupyterLab extension loaded from /opt/conda/lib/python3.6/site-packages/jupyterlab
   jupyter_notebook_1  | [I 16:08:40.625 NotebookApp] JupyterLab application directory is /opt/conda/share/jupyter/lab
   jupyter_notebook_1  | [I 16:08:40.631 NotebookApp] Serving notebooks from local directory: /home/jovyan
   jupyter_notebook_1  | [I 16:08:40.631 NotebookApp] The Jupyter Notebook is running at:
   jupyter_notebook_1  | [I 16:08:40.631 NotebookApp] http://(62b087792f87 or 127.0.0.1):8888/
   jupyter_notebook_1  | [I 16:08:40.631 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
   jupyter_notebook_1  | [I 16:08:58.820 NotebookApp] 302 GET / (172.21.0.1) 0.48ms
   jupyter_notebook_1  | [I 16:09:07.941 NotebookApp] Creating new file in /work
   jupyter_notebook_1  | [I 16:09:17.360 NotebookApp] Saving file at /work/untitled.txt
   jupyter_notebook_1  | [I 16:09:24.725 NotebookApp] Shutting down on /api/shutdown request.
   jupyter_notebook_1  | [I 16:09:24.727 NotebookApp] Shutting down 0 kernels
   jupyter_jupyter_notebook_1 exited with code 0
   s@VC666:~/sambashare/jupyter$ ls work
   s@VC66:~/sambashare/jupyter$ ls
   docker-compose.yml  work

Как вы можете видеть, он говорит, что сохранил "untitled.txt" в / work dir, но после выхода там ничего нет.

Поэтому, чтобы еще больше уточнить проблему, я изменил файл docker-compose.yml, чтобы запустить простой скрипт на python, чтобы создать файл в каталоге / work и посмотреть, сохраняется ли он. Это делает!

command: "python3 /work/test.py"  # rather than start.sh...

вот скрипт python test.py:

   import os
   import pytz
   from datetime import datetime

   dir = "/work"
   if not os.path.isdir(dir):
      dir = "" # to test outside docker container...

   nyc_time = datetime.now( pytz.timezone("America/New_York"))
   fname = os.path.join(dir,"test.txt")
   f = open(fname, 'w')
   f.write(f"Test time is {nyc_time}\n")
   f.close()
   exit()

На этот раз, после создания docker, рабочая папка содержит "test.txt", который содержит

Время тестирования 2018-11-09 11: 55: 28.472581-05: 00

Таким образом, док-контейнер, монтирующий каталог / work, выглядит нормально - возможно, проблема в том, что образ jupyter делает при завершении работы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...