创buildSSH隧道到运行Jupyter Notebook的远程Docker容器

我想创build一个SSH隧道从我的电脑到远程服务器运行Jupyter笔记本电脑(计算机>服务器>docker集装箱),允许我在我的电脑浏览器中运行Jupyter笔记本的docker集装箱。

Docker容器托pipe在运行OS X(El Capitan)的机器上。 Docker使用默认的机器IP:192.168.99.100。

$ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS default * virtualbox Running tcp://192.168.99.100:2376 v1.11.1 

我能够物理地坐在运行Docker容器的服务器上,并使用我的浏览器(192.168.99.100:8888)从该Docker容器创buildJupyter笔记本。 这validation了我的Docker端口绑定工作,我正确运行Jupyter笔记本。

但是,我不知道如何build立从客户端机器到该远程机器的Docker容器的SSH通道,并在客户机上的浏览器中启动Jupyter Notebook。

输出来自:

 $ docker ps 

产生以下内容:

 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 48a8ac126c72 kubu4/bioinformatics:v11 "/bin/bash" 55 minutes ago Up 55 minutes 8787/tcp, 0.0.0.0:8888->8888/tcp stupefied_pasteur 

我尝试在客户端计算机(localhost:8888)上的浏览器中启动Jupyter Notebook时,在远程计算机的Docker容器中创buildssh隧道,导致在terminal中出现以下错误消息:

 channel 3: open failed: connect failed: Connection refused 

我目前在我的.ssh / config文件中使用以下内容来创build隧道:

 Host tunnel3 HostName remote.ip.address User user ControlMaster auto ServerAliveInterval 30 ServerAliveCountMax 3 LocalForward localhost:8888 localhost:8888 

如果我在远程计算机上的Docker容器外的远程计算机上运行Jupyter Notebook,则可以使用此通道configuration在我的客户端浏览器中成功启动Jupyter笔记本。

只是为了增加信息,这是在远程机器的Docker容器中启动Jupyter Notebook时的输出:

 $ jupyter notebook [I 18:23:32.951 NotebookApp] Writing notebook server cookie secret to /root/.local/share/jupyter/runtime/notebook_cookie_secret [I 18:23:33.072 NotebookApp] Serving notebooks from local directory: /usr/local/bioinformatics [I 18:23:33.073 NotebookApp] 0 active kernels [I 18:23:33.073 NotebookApp] The Jupyter Notebook is running at: http://0.0.0.0:8888/ [I 18:23:33.074 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation). 

我想到了! “啊哈!” 当时记得运行Docker的远程机器是OS X(El Capitan)。 我所有的Docker构build/testing都是在Linux(Ubuntu 14.04)机器上执行的。 事实certificate,这个差异对解决这个问题至关重要。

在Ubuntu上安装Docker允许你使用“localhost”来寻址Docker容器。 在OSX上安装Docker会生成一个IP地址来用于处理Docker容器。

意识到这一点,我改变了我的客户端计算机上的.ssh / config文件中的SSH隧道configuration。

旧的隧道configuration:

 Host tunnel3 HostName remote.ip.address User user ControlMaster auto ServerAliveInterval 30 ServerAliveCountMax 3 LocalForward localhost:8888 localhost:8888 

新的隧道configuration:

 Host tunnel3 HostName remote.ip.address User user ControlMaster auto ServerAliveInterval 30 ServerAliveCountMax 3 LocalForward localhost:8888 192.168.99.100:8888 

通过这一更改,我可以在我的客户端浏览器中成功创build/使用实际托pipe在远程计算机的Docker容器中的Jupyter笔记本,在URL栏中使用localhost:8888。