Удаленный Jupyter Notebook + Docker - не обновляет каталог файлов?

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

Команда, которую я использую для выполнения ноутбука:

nvidia-docker run -it -p 8888:8888 --entrypoint /usr/local/bin/jupyter NAMEOFDOCKERIMAGE notebook --allow-root --ip=0.0.0.0 --no-browser

Команда, которую я использую для удаленного доступа к ноутбуку:

ssh -N -f -L localhost:8888:localhost:8888 [email protected]_host

Что странно, если я перейду в рабочий каталог ноутбука (на удаленном хосте/сервере) и добавлю папку + файлы, ноутбук не будет отражать изменения (т.е. Mkdir new_folder в рабочем каталоге не добавит новую папку в дерево ноутбука).

Кто-нибудь знает, почему это может быть так, и если да, то как "обновить"/"обновить" дерево?

Большое спасибо за всех и любую помощь!

Ответ 1

Контейнеры-докеры имеют изолированную файловую систему. Это означает, что программа, запущенная в контейнере (jupyter notebook в вашем случае), видит разные папки, чем те, которые у вас есть в хост-системе.

Если вы хотите предоставить контейнеру доступ к одной папке на хосте, вы можете использовать опцию -v при запуске докера.

В вашем случае вы должны запустить контейнер с помощью этой команды:

nvidia-docker run -it -p 8888:8888 -v /PATH_TO_HOST_FOLDER:/PATH_TO_CONTAINER_FOLDER --entrypoint /usr/local/bin/jupyter NAMEOFDOCKERIMAGE notebook --allow-root --ip=0.0.0.0 --no-browser

где:

  • PATH_TO_HOST_FOLDER - это путь к папке в хост-системе, которую вы хотите разделить с контейнером.

  • PATH_TO_CONTAINER_FOLDER - это PATH_TO_CONTAINER_FOLDER монтирования папки в файловой системе контейнера (например, /home/username/work где username - имя пользователя в контейнере).

Путь в контейнере зависит от используемого вами изображения докеров. Если вы не знаете путь в контейнере, вы можете взглянуть на файловую систему контейнера, запустив bash внутри контейнера с помощью этой команды:

nvidia-docker run -it --entrypoint /bin/bash NAMEOFDOCKERIMAGE 

После запуска этой команды вы находитесь в bash внутри контейнера, поэтому вы можете видеть внутреннюю файловую систему с ls, pwd и т.д.