为什么我无法访问远程Jupyter Notebook服务器?

时间:2017-03-17 02:23:49

标签: jupyter-notebook

我已经在我的centos6.5服务器上启动了一个Jupyter Notebook服务器。并且jupyter正在运行

[I 17:40:59.649 NotebookApp] Serving notebooks from local directory: /root
[I 17:40:59.649 NotebookApp] 0 active kernels 
[I 17:40:59.649 NotebookApp] The Jupyter Notebook is running at:https://[all ip addresses on your system]:8045/
[I 17:40:59.649 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).

当我想在同一局域网中远程访问Jupyter时,比如打开http://192.168.1.111:8045/,我根本无法打开Jupyter页面。顺便说一句,我可以成功访问远程centos服务器。

可能的原因是什么?

18 个答案:

答案 0 :(得分:66)

您是否配置了 jupyter_notebook_config.py 文件以允许外部连接?

默认情况下,Jupyter Notebook只接受来自localhost的连接(例如,来自运行它的同一台计算机)。通过修改默认'中的 NotebookApp.allow_origin 选项。 '到' *',您允许从外部访问Jupyter。

c.NotebookApp.allow_origin = '*' #allow all origins

您还需要更改笔记本将侦听的IP:

c.NotebookApp.ip = '0.0.0.0' # listen on all IPs


Documentation on the Jupyter Notebook config file.

答案 1 :(得分:30)

我设法通过ip使用以下命令访问我的本地服务器:

jupyter notebook --ip xx.xx.xx.xx --port 8888

用你的jupyter服务器的本地ip替换xx.xx.xx.xx

答案 2 :(得分:13)

James023已经给出了正确答案。 只需格式化

如果尚未配置jupyter_notebook_config.py文件

第1步:通过在控制台中键入此行来生成文件

jupyter notebook --generate-config

第二步:编辑值

gedit  /home/koushik/.jupyter/jupyter_notebook_config.py

(在任何地方添加以下两行,因为无论如何都会注释默认值)

c.NotebookApp.allow_origin = '*' #allow所有起源​​

c.NotebookApp.ip = '0.0.0.0'#侦听所有IP

第3步:一旦您关闭了gedit,以防端口被阻塞

sudo ufw allow 8888#启用您的tcp:8888端口,这是您的默认jupyter端口

第四步: 设置密码

jupyter notebook password#它会提示您输入密码

第5步:启动jupyter

jupyter notebook

并像http://xxx.xxx.xxx.xxx:8888/login一样连接?

答案 3 :(得分:5)

在RedHat 7中,我们需要在运行Jupiter命令之前允许特定的端口。假设端口为8080

iptables -I INPUT 1 -p tcp --dport 8080 -j ACCEPT

然后我们可以正常运行它。例如,使用:

jupyter notebook --ip 0.0.0.0 --no-browser --port=8080 --allow-root

或您喜欢的任何内容。

答案 4 :(得分:3)

另一个原因可能是防火墙。我们甚至用

也有同样的问题

jupyter notebook --ip xx.xx.xx.xxx --port xxxx。

然后它在我们新的centOS7上变成了防火墙。

答案 5 :(得分:2)

首先,如果不可用,请先创建一个配置文件

jupyter notebook --generate-config

然后转到文件并进行编辑

cd ~/.jupyter

取消三行注释或全部删除并添加三行

c.NotebookApp.allow_origin = '*' #allow all origins
c.NotebookApp.ip = '0.0.0.0' # listen on all IPs
c.NotebookApp.allow_remote_access = True

尝试连接远程 IP。 (如果您使用的是 AWS EC2,则需要将您的 ip 列入白名单,并为您的客户端 pc 或端口 8888 上的所有 IP 地址启用入站连接)

如果还是连接不上,可以试试

jupyter notebook --ip 0.0.0.0 --port 8888

答案 6 :(得分:2)

jupyter notebook --ip 0.0.0.0 --port 8888 会起作用。

答案 7 :(得分:2)

从命令行,我们可以看到您的jupyter服务器正常运行。您无法访问远程jupyter服务器的原因是您的远程centos6.5服务器的防火墙规则阻止来自您本地浏览器的传入请求,即。阻止您的tcp:8045端口 sudo ufw allow 80 # enable http server
sudo ufw allow 443 # enable https server
sudo ufw allow 8045 # enable your tcp:8045 port
然后再次尝试访问你的jupyter。

答案 8 :(得分:1)

我在Windows 10上使用Anaconda3。 安装时,请记住将其标记为“添加到环境变量”。


Prerequisite: A notebook configuration file

检查是否有笔记本配置文件, jupyter_notebook_config.py。该文件的默认位置 是您的主目录中的Jupyter文件夹:

  • Windows:C:\\Users\\USERNAME\\.jupyter\\jupyter_notebook_config.py
  • OS X:/Users/USERNAME/.jupyter/jupyter_notebook_config.py
  • Linux:/home/USERNAME/.jupyter/jupyter_notebook_config.py

如果您还没有Jupyter文件夹,或者您的Jupyter文件夹不包含 一个笔记本配置文件,运行以下命令:

$ jupyter notebook --generate-config

此命令将在必要时创建Jupyter文件夹,并创建笔记本 配置文件jupyter_notebook_config.py,在此文件夹中。


默认情况下,Jupyter Notebook仅接受来自本地主机的连接。

按如下所示编辑jupyter_notebook_config.py文件以接受所有传入的连接:

c.NotebookApp.allow_origin = '*' #allow all origins

您还需要更改笔记本计算机将收听的IP:

c.NotebookApp.ip = '0.0.0.0' # listen on all IPs

答案 9 :(得分:0)

或者,您可以仅创建到服务器的隧道:

ssh -i <your_key> <user@server-instance> -L 8888:127.0.0.1:8888

然后只需在浏览器中打开127.0.0.1:8888

如果您没有identity_file,也可以省略-i <your_key>

答案 10 :(得分:0)

如果使用的是Conda环境,则应重新设置配置文件。文件位置将是这样。在Conda中创建环境后,我没有设置配置文件,那是我的连接问题。

C:\Users\syurt\AppData\Local\Continuum\anaconda3\envs\myenv\share\jupyter\jupyter_notebook_config.py

答案 11 :(得分:0)

任何仍然卡住的人-按照this page上的说明进行操作。

基本上:

  1. 按照AWS最初描述的步骤进行操作。

    1. 正常打开SSH。
    2. source activate python3
    3. Jupyter笔记本
  2. 请勿剪切和粘贴任何内容。而是打开一个新的终端窗口,而不关闭第一个窗口。

  3. 在新窗口中,输入上面的链接中所述的SSH命令。

  4. 打开网络浏览器,然后转到http://127.0.0.1:8157

答案 12 :(得分:0)

如果仍然遇到问题,并且正在运行EC2 AWS实例之类的东西,可能只是通过AWS控制台打开端口的情况。

see this answer

答案 13 :(得分:0)

我遇到了同样的问题,但以上任何解决方法均不适合我。但是,如果我使用相同的配置安装了docker版本的jupyter笔记本,那么它对我来说是可行的。

对于我来说,可能是iptables规则问题。有时您可能只使用ufw来允许所有路由到您的服务器。但是我的iptables -F可以清除所有规则。然后检查iptables -L -n以查看其是否有效。

问题已解决。

答案 14 :(得分:0)

在jupyter_notebook_config文件中编辑以下内容
输入实际的计算机IP地址
c.NotebookApp.ip ='192.168.x.x'
c.NotebookApp.allow_origin ='*'

在客户端使用登录密码启动jupyter笔记本
jupyter笔记本密码

在浏览器上设置密码登录后,然后键入远程服务器的IP地址,后跟端口。例如192.168.1.56:8889

答案 15 :(得分:0)

尝试执行以下步骤:

以下命令可修复读/写

    sudo chmod -R a+rw /home/ubuntu/certs/mycert.pem

答案 16 :(得分:0)

我遇到了类似的问题,并在执行以下操作后解决了该问题:

  1. 检查您的 jupyter 配置文件: 这在此处详细描述; https://testnb.readthedocs.io/en/stable/examples/Notebook/Configuring%20the%20Notebook%20and%20Server.html

--您只需从上面的链接中学习如何让 jupyter 服务器侦听您的本地机器 IP -- 您将需要知道您的本地机器 IP(我在 ubuntu 上使用“ifconfig -a”来查找)-请检查 centos6

完成配置后,您可以在本地 IP 上运行 jupyter notebook: jupyter 笔记本 --ip=* --no-browser

请将 * 替换为您的 IP 地址,例如:jupyter notebook --ip=192.168.x.x --no-browser

您现在可以使用此 ip:port 从连接到路由器的任何设备访问您的 jupyter 服务器(端口通常是 8888,例如我使用“192.168.xx:8888”从其他设备访问我的服务器设备)

现在如果你想从公共 IP 访问这个服务器,你必须:

  1. 找到您的公共 IP(只需在谷歌上输入我的 IP 是什么)
  2. 使用此 IP 地址而不是您的本地 IP 从未连接到同一路由器的任何设备访问服务器 请注意:如果您的 linux 服务器在虚拟机上运行,​​您需要将路由器设置为允许从公共 IP 访问您的 VB,设置取决于路由器类型。 否则,您应该能够从任何未连接到您的路由器的设备使用公共 IP 和为其设置的端口访问服务器,或者使用您的本地 IP 和从连接到同一路由器的任何设备设置的端口!

答案 17 :(得分:0)

这是您的私人IP地址吗?如果是这样,您将需要使用您的公共场所。去ipchicken找出它是什么。我知道你在同一个局域网中,但试试看它是否可以解决任何问题。