连接到在远程服务器上的docker中运行的jupyter Notebook

时间:2019-02-07 11:34:33

标签: docker jupyter-notebook ssh-tunnel

我在从本地计算机到我在docker容器中的远程服务器上运行的jupyter笔记本实例建立连接时遇到问题。

我到目前为止所做的:

我使用ssh username@remoteHostIp

连接到远程服务器

我运行docker container ls以确保我的容器尚未运行

现在我以docker run -it -p 8888:8888 -p 6006:6006 -v ~/:/host waleedka/modern-deep-learning开始我的容器

我现在在我的容器中使用终端并启动没有浏览器的jupyter笔记本实例

jupyter notebook --no-browser --port=8889 --allow-root

它成功启动:

The Jupyter Notebook is running at:
[I 11:14:51.979 NotebookApp] system]:8889/

现在,我在本地计算机上启动另一个Shell并创建ssh隧道:

ssh -N -f -L localhost:8888:localhost:8889 username@ remote_host_name

我的shell几秒钟后返回以下内容:

channel 2: open failed: connect failed: Connection refused
channel 2: open failed: connect failed: Connection refused
channel 2: open failed: connect failed: Connection refused

我无法使用localhost:8888 /或localhost:8889 /来访问jupyter笔记本。

当我在docker容器之外的远程服务器上运行jupyter notebook并创建ssh隧道时,一切正常。

一些其他信息: 远程服务器: 发行人ID:Ubuntu 说明:Ubuntu 16.04.3 LTS 发行:16.04 代号:xenial

我的本​​地计算机在osx moave上运行

2 个答案:

答案 0 :(得分:3)

首先,您应使用

连接到远程服务器。
ssh username@remoteHostIp

连接到它后,您应该使用

运行docker容器
docker run -it -p 8080:8888 -p 6006:6006 -v ~/:/host waleedka/modern-deep-learning

我正在考虑8888端口是jupyter笔记本端口,而8080端口是远程服务器端口

现在,在本地计算机上打开一个新的终端窗口,使用以下选项再次通过SSH SSH到远程计算机以设置端口转发。

ssh -N -L localhost:8000:localhost:8080 username@remoteHostIp

我正在考虑这里的端口8000是我的本地计算机端口,而8080是我上面所说的已经是远程服务器端口

现在通过本地浏览器访问远程jupyter服务器。打开浏览器,然后转到:

localhost:8000

答案 1 :(得分:0)

我自己通过连接到删除服务器并检查docker容器ip地址docker inspect <container_name>解决了这个问题。 我使用了该IP地址,然后创建了ssh隧道:

ssh -N -f -L localhost:8889:dockerContainerIpAdress:8889 username@ remote_host_name

现在我可以使用localhost:8889在本地浏览器中连接到jupyter笔记本