How do I start tensorflow docker jupyter notebook

My simple yet efficient workflow:

TL;DR version:

  1. Open Docker Quickstart Terminal. If it is already open, run $ cd
  2. Run this once: $ docker run -it -p 8888:8888 -p 6006:6006 -v /$(pwd)/tensorflow:/notebooks --name tf b.gcr.io/tensorflow/tensorflow
  3. To start every time: $ docker start -i tf

If you are not on windows, you should probably change /$(pwd) to $(pwd)

You will get an empty folder named tensorflow in your home directory for use as a persistent storage of project files such as Ipython Notebooks and datasets.

Explanation:

  1. cd for making sure you are in your home directory.
  2. params:
    • -it stands for interactive, so you can interact with the container in the terminal environment.
    • -v host_folder:container_folder enables sharing a folder between the host and the container. The host folder should be inside your home directory. /$(pwd) translates to //c/Users/YOUR_USER_DIR in Windows 10. This folder is seen as notebooks directory in the container which is used by Ipython/Jupyter Notebook.
    • --name tf assigns the name tf to the container.
    • -p 8888:8888 -p 6006:6006 mapping ports of container to host, first pair for Jupyter notebook, the second one for Tensorboard
  3. -i stands for interactive

Running TensorFlow on the cloud


Jupyter now has a ready to run Docker image for TensorFlow:

docker run -d -v $(pwd):/home/jovyan/work -p 8888:8888 jupyter/tensorflow-notebook


After further reading of docker documentation I have a solution that works for me:

docker run -p 8888:8888 -p 6006:6006 b.gcr.io/tensorflow/tensorflow ./run_jupyter.sh

The -p 8888:8888 and -p 6006:6006 expose the container ports to the host on the same port number. If you just use -p 8888, a random port on the host will be assigned.

The ./run_jupyter.sh tells docker what to execute within the container.

With this command, I can use a browser on the host machine to connect to http://localhost:8888/ and access the jupyter notebook.

UPDATE: After wrestling with docker on windows I switched back to a Ubuntu machine with docker. My notebook was being erased between docker sessions which makes sense after reading more docker documentation. Here is an updated command which also mounts a host directory within the container and starts jupyter pointing to that mounted directory. Now my notebook is saved on the host and will be available next time start up tensorflow.

docker run -p 8888:8888 -p 6006:6006 -v /home/rob/notebook:/notebook b.gcr.io/tensorflow/tensorflow sh -c "jupyter notebook /notebook"

For a Linux host Robert Graves answer will work, but for Mac OS X or Windows there is more to be done because docker runs in a virtual machine.

So to begin launch the docker shell (or any shell if you are using Linux) and run the following command to launch a new TensorFlow container:

docker run -p 8888:8888 -p 6006:6006 b.gcr.io/tensorflow/tensorflow ./run_jupyter.sh

Then for Mac OS X and Windows you need to do the following only once:

  1. Open VirtualBox
  2. Click on the docker vm (mine was automatically named "default")
  3. Open the settings by clicking settings
  4. In the network settings open the port forwarding dialog
  5. Click the + symbol to add another port and connect a port from your mac to the VM by filling in the dialog as shown below. In this example I chose port 8810 because I run other notebooks using port 8888. enter image description here
  6. then open a browser and connect to http://localhost:8810 (or whichever port you set in the host port section
  7. Make your fancy pants machine learning app!