File I/O with Containers
OverviewTeaching: 15 min
Exercises: 5 minQuestions
How do containers interact with my local file system?Objectives
First learning objective.
Copying files between the local host and Docker containers is possible. On your local host find a file that you want to transfer to the container and then
touch io_example.txt # If on Mac need to do: chmod a+x io_example.txt echo "This was written on local host" > io_example.txt docker cp io_example.txt <CONTAINER ID>:/home/docker/data/
and then from the container check and modify it in some way
pwd ls cat io_example.txt echo "This was written inside Docker" >> io_example.txt
/home/docker/data io_example.txt This was written on local host
and then on the local host copy the file out of the container
docker cp <CONTAINER ID>:/home/docker/data/io_example.txt .
and verify if you want that the file has been modified as you wanted
This was written on local host This was written inside Docker
What is more common and arguably more useful is to mount volumes to
containers with the
This allows for direct access to the host file system inside of the container and for
container processes to write directly to the host file system.
docker run -v <path on host>:<path in container> <image>
For example, to mount your current working directory on your local machine to the
directory in the example container
docker run --rm -it -v $PWD:/home/docker/data matthewfeickert/intro-to-docker
From inside the container you can
ls to see the contents of your directory on your local
and yet you are still inside the container
You can also see that any files created in this path in the container persist upon exit
touch created_inside.txt exit ls *.txt
This I/O allows for Docker images to be used for specific tasks that may be difficult to do with the tools or software installed on only the local host machine. For example, debugging problems with software that arise on cross-platform software, or even just having a specific version of software perform a task (e.g., using Python 2 when you don’t want it on your machine, or using a specific release of TeX Live when you aren’t ready to update your system release).
Running Jupyter from a Docker Container
You can run a Jupyter server from inside of your Docker container.
First run a container while exposing the container’s
8888 with the
docker run --rm -it -p 8888:8888 matthewfeickert/intro-to-docker /bin/bash
Then start a Jupyter server with the server listening on all IPs
jupyter notebook --allow-root --no-browser --ip 0.0.0.0
though for your convince the example container has been configured with these default settings so you can just run
Finally, copy and paste the following with the generated token from the server as
<token> into your web browser on your local host machine
You now have access to Jupyter running on your Docker container.
First key point. Brief Answer to questions.