thasmo
thasmo

Reputation: 9937

How to mount Docker container volumes to different path?

Container #1 runs with a volume defined for /data, and I'd like to use the run option --volumes-from to mount this volume to another container, but I'd like to change the path for the second container.

In other words /data from container #1 should be mounted to /custom/data inside container #2.

Is that possible? Is there a solution for this?

Thanks!

Upvotes: 5

Views: 7968

Answers (2)

Davide
Davide

Reputation: 95

Why you want to use --volumes-from? You can use:

docker run -d -v DataVolume1:/path1 --name container1 image1:v1.0.0
docker run -d -v DataVolume1:/path2 --name container2 image2:v1.0.0

or better --mount instead of -v. You can create and then attach the container or create and attach directly the volume to the first container and then to the second (my example)

Upvotes: 0

freethebees
freethebees

Reputation: 1017

It is currently not possible to add custom options to --volumes-from.

There are two possible solutions. However, neither is perfect...

Solution 1

Personally, I do not like this as it only works in Linux. It will not work with Boot2Docker. How to map volume paths using Docker's --volumes-from?

Solution 2

The second solution is to use a sym-link. This works pretty great but there is a caveat at the end.

Run a docker container with an interactive shell and the volumes from container #1; busybox is ideal for this:

docker run --rm -it --volumes-from container-1-name busybox

where container-1-name is the name of container#1.

Within the shell that opens, you can create a symbolic link that points from /custom/data to /data. Assuming that the root to /custom already exists (use mkdir first if not), type:

ln -s /data /custom/data

Now you can check this link exists. You should see something like this:

/ # ls -l custom/
total 0
lrwxrwxrwx    1 root     root             5 Mar  4 08:09 data -> /data

Then you are done with this container. Exit. Now, if you create a new container than uses --volumes-from container-1-name, it can access the contents of /data via /custom/data.

Caveat: You should note that containers using --volumes-from container-1-name will have both /data and /custom/data. There is no way around that using this solution. In most situations, I imagine this is fine. However, if this no good for you, you will need to find another solution.

Upvotes: 2

Related Questions