访问在虚拟机上运行的 Jupyter Notebook

10
我想在使用vagrant启动的ubuntu虚拟机上运行jupyter notebook。
$ jupyter notebook --no-browser --port 8004
[I 18:26:10.152 NotebookApp] 本地目录中的笔记本: /home/vagrant/path/to/jupyter/notebook/directory
[I 18:26:10.153 NotebookApp] 0个活跃内核
[I 18:26:10.154 NotebookApp] Jupyter Notebook正在运行于: http://localhost:8004/
[I 18:26:10.154 NotebookApp] 使用Control-C停止该服务器并关闭所有内核(按两次以跳过确认)。
Jupyter notebook在本地主机上启动。但是,为了从主机访问笔记本,我需要在 0.0.0.0 上启动笔记本。如何将IP绑定到 0.0.0.0,使其路由到虚拟机中的 127.0.0.1?
我的主机是Windows,虚拟机是Ubuntu 14.04.4。

1
Virtualbox有一个端口转发窗口... - OneCricketeer
或者访问http://jupyter-notebook.readthedocs.io/en/latest/public_server.html#notebook-public-server。 - OneCricketeer
如果您只是使用Vagrant作为Jupyter的容器,那么Docker也提供了一个Jupyter映像。 - OneCricketeer
5个回答

14

运行笔记本服务器就能得到答案。

首先生成jupyter_notebook_config.py文件。

$ jupyter notebook --generate-config

默认情况下,jupyter_notebook_config.py 的内容都被注释了。请修改以下条目:

  • 接受来自任何主机(而不仅仅是本地主机)的传入请求
    找到 #c.NotebookApp.ip = 'localhost' 并将其改为 c.NotebookApp.ip = '*'
  • 不要启动浏览器
    找到 #c.NotebookApp.open_browser = True 并将其改为 c.NotebookApp.open_browser = False

6
你可以使用--ip参数来更改笔记本服务器监听的IP地址。
运行:
jupyter notebook --ip=0.0.0.0

注意:运行 jupyter notebook --help 命令以检查参数。
--ip=<Unicode> (NotebookApp.ip)
    Default: 'localhost'
    The IP address the notebook server will listen on.

3
正如上面的评论所述,您需要在虚拟机上转发端口。
当您运行虚拟机时,除非您授权,否则该计算机上的网络通常几乎无法访问外部世界。通常,您可以从虚拟机连接到外部,但要监听端口则是另一步。
假设您的主机名为myhostname,当您在浏览器中输入myhostname:8080时,它将被拒绝,因为您的计算机上没有任何正在运行的内容。现在假设您的虚拟机正在8080端口上运行服务器,并且您想要链接这两个。您需要按照以下说明操作,以便当您点击myhostname:8080时,您的本机操作系统将看到虚拟机正在监听该端口。请求将传递给虚拟机,虚拟机将进而将其转发到您的jupyter实例。
这是我找到的最好的说明:

https://www.howtogeek.com/122641/how-to-forward-ports-to-a-virtual-machine-and-use-it-as-a-server/

这是我设置的一些截图。 我运行了“python -m http.server 8000”以连接到服务器。
像这样设置您的虚拟机:VM设置 像这样从本机操作系统连接到虚拟服务器: 从本机操作系统访问服务器 您域上的其他用户应该能够通过:8000连接。 您可以通过在命令行上键入“hostname”来在Windows上获得该端口。
假设您想将http服务器公开给端口80上的其他用户,但仍在服务器内部使用端口8000运行,则只需更改端口转发配置中的主机端口为80,而不是8000即可。
希望这能帮助到您。

3

对于我的情况(使用VMware和Ubuntu),解决方案非常简单。

默认情况下,网络适配器已处于NAT模式。如果没有,请在VM实例的设置中进行调整。

在VM终端中键入ifconfig以获取本地IP,例如192.168.124.131

启动笔记本:jupyter notebook --ip=192.168.124.131 --no-browser

终端会给出一个链接,您可以使用主机上的链接访问jupyter,例如http://192.168.124.131:8888/?token=xxxxxxxxxxxxxxxxxxx


1
在较新版本的Jupyter中,配置更改与上面的答案略有不同(否则可能会出现错误“''不是IPv4或IPv6地址”)。
整个解决方案:
运行:
jupyter notebook --generate-config
在配置中更改以下内容:
c.NotebookApp.ip = '0.0.0.0' c.NotebookApp.open_browser = False 现在您可以简单地运行Jupyter:
jupyter notebook

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接