Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I add a volume to an existing Docker container?

Tags:

docker

I have a Docker container that I've created simply by installing Docker on Ubuntu and doing:

sudo docker run -i -t ubuntu /bin/bash 

I immediately started installing Java and some other tools, spent some time with it, and stopped the container by

exit 

Then I wanted to add a volume and realised that this is not as straightforward as I thought it would be. If I use sudo docker -v /somedir run ... then I end up with a fresh new container, so I'd have to install Java and do what I've already done before just to arrive at a container with a mounted volume.

All the documentation about mounting a folder from the host seems to imply that mounting a volume is something that can be done when creating a container. So the only option I have to avoid reconfiguring a new container from scratch is to commit the existing container to a repository and use that as the basis of a new one whilst mounting the volume.

Is this indeed the only way to add a volume to an existing container?

like image 804
mahonya Avatar asked Feb 03 '15 15:02

mahonya


People also ask

How do I mount a volume to an already running container?

To attach a volume into a running container, we are going to: use nsenter to mount the whole filesystem containing this volume on a temporary mountpoint; create a bind mount from the specific directory that we want to use as the volume, to the right location of this volume; umount the temporary mountpoint.


2 Answers

You can commit your existing container (that is create a new image from container’s changes) and then run it with your new mounts.

Example:

$ docker ps  -a  CONTAINER ID        IMAGE                 COMMAND                  CREATED              STATUS                          PORTS               NAMES 5a8f89adeead        ubuntu:14.04          "/bin/bash"              About a minute ago   Exited (0) About a minute ago                       agitated_newton  $ docker commit 5a8f89adeead newimagename $ docker run -ti -v "$PWD/somedir":/somedir newimagename /bin/bash 

If it's all OK, stop your old container, and use this new one.

That´s it :)

like image 50
Leonardo Cuquejo Avatar answered Sep 20 '22 16:09

Leonardo Cuquejo


We don't have any way to add volume in running container, but to achieve this objective you may use the below commands:

Copy files/folders between a container and the local filesystem:

docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH  docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH 

For reference see:

https://docs.docker.com/engine/reference/commandline/cp/

like image 41
user128364 Avatar answered Sep 17 '22 16:09

user128364