远程Jupyter Notebook + Docker-不更新文件目录吗?

时间:2018-09-16 20:25:19

标签: python docker ubuntu jupyter-notebook

我目前正在使用远程Jupyter笔记本(通过docker映像)工作,并且在查找目录(我正在运行笔记本的目录)中存在但文件夹中不存在的文件夹时遇到问题笔记本树。

我用来执行笔记本的命令:

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 remote_user@remote_host

奇怪的是,如果我导航到笔记本的工作目录(在远程主机/服务器上)并添加文件夹+文件,则笔记本将不会反映更改(即工作目录中的mkdir new_folder不会将new_folder添加到笔记本的树)。

有人会知道为什么会这样吗?如果是这样,如何“刷新” /“更新”树?

非常感谢所有帮助!

1 个答案:

答案 0 :(得分:6)

Docker容器具有隔离的文件系统。这意味着在容器(您的情况下为jupyter笔记本)中运行的程序将看到与主机系统中不同的文件夹。

如果要授予容器访问主机中一个文件夹的权限,则可以在运行docker时使用option -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是容器文件系统中文件夹的安装点(例如/home/username/work,其中username是容器中用户的名称)。

容器中的路径取决于您使用的docker映像。如果您不知道容器中的路径,可以通过使用以下命令在容器内部运行bash来查看容器文件系统:

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

运行此命令后,您将处于容器内部的bash中,因此可以看到带有lspwd等的内部文件系统。