Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Connecting Spyder to Remote Jupyter Notebook in a Docker Container

I have been trying to connect Spyder to a docker container running on a remote server and failing time and again. Here is a quick diagram of what I am trying to achieve:

"My frustrating situation"

Currently I am launching the docker container on the remote machine through ssh with

docker run --runtime=nvidia -it --rm --shm-size=2g -v /home/timo/storage:/storage -v /etc/passwd:/etc/passwd -v /etc/group:/etc/group --ulimit memlock=-1 -p 8888:8888 --ipc=host ufoym/deepo:all-jupyter

so I am forwarding on port 8888. Then inside the docker container I am running

jupyter notebook --no-browser --ip=0.0.0.0 --port=8888 --allow-root --notebook-dir='/storage' 

OK, now for the Spyder part - As per the instructions here, I go to ~/.local/share/jupyter/runtime, where I find the following files:

kernel-ada17ae4-e8c3-4e17-9f8f-1c029c56b4f0.json  nbserver-11-open.html  nbserver-21-open.html  notebook_cookie_secret
kernel-e81bc397-05b5-4710-89b6-2aa2adab5f9c.json  nbserver-11.json       nbserver-21.json

Not knowing which one to take, I copy them all to my local machine.

I now go to Consoles->Connect to an Existing Kernel, which gives me the "Connect to an Existing Kernel" window which I fill out as so (of course using my actual remote IP address):

"Connect to an Existing Kernel"

(here I have chosen the first of the json files for Connection info:). I hit enter and Spyder goes dark and crashes.

"Spyder goes dark and crashes"

This happens regardless of which connection info file I choose. So, my questions are:

1: Am I doing all of this correctly? I have found lots of instructions for how to connect to remote servers, but not so far for specifically connecting to a jupyter notebook on a docker on a remote server.

2: If yes, then what else can I do to troubleshoot the issues I am encountering?

I should also note that I have no problems connecting to the Jupyter Notebook through the browser on my local machine. It's just that I would prefer to be working with Spyder as my IDE.

Many thanks in advance!

like image 309
Mr Squid Avatar asked Jul 22 '19 01:07

Mr Squid


People also ask

How do I connect to a remote service from a Docker container?

Install Docker on your SSH host. You do not need to install Docker locally. Follow the quick start for the Remote - SSH extension to connect to a host and open a folder there. Use the Remote-Containers: Reopen in Container command from the Command Palette (F1, Ctrl+Shift+P).

How do I add a Jupyter notebook to Docker?

Introduction to Jupyter Docker StacksInstall Docker and sign up for the DockerHub website (free). Run a command to pull an image that contains Jupyter and preinstalled packages based on the image type. Work with your notebook file.

What is Jupyter Docker?

Jupyter Docker Stacks are a set of ready-to-run Docker images containing Jupyter applications and interactive computing tools. You can use a stack image to do any of the following (and more): Start a personal Jupyter Server with JupyterLab frontend (default) Run JupyterLab for a team using JupyterHub.


1 Answers

This isn't a solution so much as a work around, but sshfs might be of help

Use sshfs to mount the remote machine's home directory on a local directory, then your local copy of Spyder can edit the file as if it were a local file.

sshfs remotehost.com:/home/user/ ./remote-host/

It typically takes about half a second to upload the changes to an AWS host when you I hit save in Spyder, which is an acceptable delay for me. When it's time to run the code, ssh into the remote machine, and run the code from an IPython shell. It's not elegant, but it does work.

I'm not expecting this to be the best answer, but maybe you can use it as a stopgap solution.

like image 180
Fergal Mullally Avatar answered Nov 15 '22 03:11

Fergal Mullally