title: Create ssh tunnel to remote docker container running Jupyter Notebook
body: <p>I'd like to create a ssh tunnel from my computer to a remote server to a docker container running Jupyter Notebook (computer>server>Docker container) that allows me to run a Jupyter Notebook in my browser on my computer.</p>
  
  <p>The Docker container is hosted on a machine running OS X (El Capitan). Docker is using the default machine IP: 192.168.99.100.</p>
  
  <pre><code>$ docker-machine ls
  NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER    ERRORS
  default   *        virtualbox   Running   tcp://192.168.99.100:2376           v1.11.1  
  </code></pre>
  
  <p>I am able to physically sit at the server running the Docker container and use my browser (192.168.99.100:8888) to create Jupyter Notebooks from that Docker container. This verifies that my Docker port bindings work and that I'm running the Jupyter Notebook correctly.</p>
  
  <p>However, I don't know how to establish a ssh tunnel from a client machine to that remote machine's Docker container and launch a Jupyter Notebook in my browser on the client machine.</p>
  
  <p>The output from:</p>
  
  <pre><code>$ docker ps
  </code></pre>
  
  <p>produces the following:</p>
  
  <pre><code>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-&gt;8888/tcp   stupefied_pasteur
  </code></pre>
  
  <p>My attempts at creating a ssh tunnel to the remote machine's Docker container results in the following error message in Terminal when I try to launch the Jupyter Notebook in my browser on the client machine (localhost:8888):</p>
  
  <pre><code>channel 3: open failed: connect failed: Connection refused
  </code></pre>
  
  <p>I'm currently using the following in my .ssh/config file to create the tunnel:</p>
  
  <pre><code>Host tunnel3
  HostName remote.ip.address
  User user
  ControlMaster auto
  ServerAliveInterval 30
  ServerAliveCountMax 3
  LocalForward localhost:8888 localhost:8888
  </code></pre>
  
  <p>I can use this tunneling configuration to successfully launch Jupyter Notebooks in my client browser if I run the Jupyter Notebook on the remote machine outside of the Docker container that's on the remote machine.</p>
  
  <p>Just for added info, this is the output when I launch the Jupyter Notebook in the remote machine's Docker container:</p>
  
  <pre><code>$ 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).
  </code></pre>